- •Атрибуты в среде .Net и языке c#.
- •Метаданные
- •Понятие атрибутов
- •Предопределенные и собственные атрибуты
- •Потребители атрибутов
- •Применение атрибутов
- •Сокращенное именование атрибутов
- •Создание собственных атрибутов:
- •Применение собственных атрибутов:
- •Ограничение использования атрибутов:
- •Атрибуты уровня сборки и модуля:
- •Рефлексия атрибутов:
- •Выводы:
- •Язык xml. Классы платформы .Net для работы с xml-данными.
- •Синтаксис xml
- •Работа с xml при помощи System.Xml
- •Работа с xml при помощи linq to xml
- •Выводы:
- •Потоковый ввод-вывод. Файлы. Работа с файлами и каталогами. Пространство имен System.Io
- •Классы Directory (DirectoryInfo) и File (FileInfo) Некоторые общие свойства классов DirectoryInfo и FileInfo:
- •Дополнительные возможности класса DirectoryInfo
- •Дополнительные возможности класса FileInfo
- •Дополнительные члены File
- •Потоковый ввод-вывод
- •Работа с классом FileStream
- •Работа с классами StreamWriter и StreamReader
- •Классы StringWriter и StringReader
- •Работа с классами BinaryWriter и BinaryReader
- •Выводы:
- •Сериализация. Атрибуты. Стандартные форматы сериализации. Понятие сериализации объектов
- •Роль графов объектов
- •Конфигурирование объектов для сериализации
- •Общедоступные поля, приватные поля и общедоступные свойства
- •Стандартные форматеры сериализации
- •Настройка сериализации с использованием атрибутов
- •Выводы:
- •Понятие бд и субд. Язык sql. Ado.Net как средство доступа из c# к субд. Понятие бд
- •Понятие субд
- •Обзор синтаксиса
- •Подключенный уровень
- •Автономный уровень
- •Основные свойства класса DataSet
- •Основные методы класса DataSet
- •Типы DataColumn и DataRow
- •Основные члены типа DataColumn:
- •Основные члены типа DataRow:
- •Работа с адаптерами данных:
- •Основные члены класса DbDataAdapter:
- •Параллельные вычисления. Многозадачность и многопоточность.
- •Некоторые члены класс Process:
- •Некоторые члены класса ProcessThread
- •Домены приложений
- •Некоторые члены класс AppDomain:
- •Многопоточность. Классификация состояний потока. Средства многопоточного программирования System.Threading.
- •Некоторые члены пространства имен System.Threading
- •Основные члены класс Thread
- •Состояния потока
- •Многопоточное программирование при помощи асинхронных вызовов делегатов
- •Создание вторичных потоков при помощи Thread.Start()
- •Синхронизация с помощью lock
- •Синхронизация с использованием типа System.Threading.Monitor
- •Синхронизация с использованием типа System.Threading.Interlocked
- •Синхронизация с использованием атрибута [Synchronization]
- •Использование System.Threading.Timer
- •Пул потоков clr
- •Библиотека Windows.Forms. Пространства имен. Структура приложения. Элементы управления. События. Иерархия элементов управления.
- •Основные пространства имен Windows Forms
- •Структура приложения WinForms
- •Элементы управления
- •События
- •Библиотека wpf. Отличия wpf от WindowsForms. Разметка xaml. Понятие Windows Presentation Foundation
- •Типы приложений wpf
- •Основные сборки wpf
- •Построение приложения wpf без xaml
- •Построение приложения wpf с использованием только xaml
- •Пример c# обработчика события для контрола, объявленного в xaml (связь кода и xaml):
- •Создание проекта
- •Знакомство с инструментами визуального конструктора wpf
Параллельные вычисления. Многозадачность и многопоточность.
Процесс - концепция уровня ОС, описывающая ресурсы (память, потоки, подключенные библиотеки и проч.), используемые выполняющейся программой. Системы, которые могут выполнять много процессов одновременно, называются многозадачными.
Каждый процесс имеет один первичный поток, и может создавать дополнительные. Поток представляет собой выполняющийся одновременно с другими потоками программный код. Все потоки в рамках одного процесса разделяют общую память. Приложения, использующие несколько параллельно выполняющихся потоков, называются многопоточными.
Создание многопоточных приложений может приводить к появлению дополнительных ошибок, не возникающих в однопоточных приложениях. Например, если один поток начинает изменять какой-либо ресурс, а другой пытается прочитать его значение до полного изменения. Для избавления от таких ошибок применяется синхронизация: при обращении потока к какому-то ресурсу применяются механизмы, заставляющие другие потоки, пытающиеся получить доступ к тому же ресурсу, приостановить свое выполнение, пока ресурс не будет освобожден. Однако использование синхронизации может приводить в свою очередь к другим ошибкам, например, так называемым deadlock-ам, когда два или более потоков взаимно ожидают освобождения захваченных остальными ресурсов. При этом возобновление их работы становится невозможным. Также данные ошибки из-за трудности предсказания работы планировщика, управляющего выделением процессорного времени потокам, часто могут быть трудно воспроизводимыми и плохо поддаваться отладке. Чтобы избежать таких проблем, многопоточные приложения требуют внимательного и аккуратного подхода к разработке архитектуры взаимодействия потоков.
Для получения информации о процессах и потоках в .NET используются классы пространства имен System.Diagnostic, например:
Process |
Предоставляет доступ к локальным и удаленным процессам, а также позволяет запускать и останавливать процессы программным образом |
ProcessModule |
Представляет модуль (*.dll или *.ехе), который должен загружаться в определенный процесс. |
ProcessStartlnfо |
Позволяет указывать набор значений, которые должны использоваться при запуске процесса посредством метода Process.Start () |
ProcessThread |
Представляет поток внутри определенного процесса. Этот тип применяется для диагностики потоков в процессе, но не для запуска новых |
Некоторые члены класс Process:
Handle |
Дескриптор (IntPtr), который был назначен процессу операционной системой |
Id |
Идентификатор (PID) соответствующего процесса. |
MachmeName |
Имя компьютера, на котором выполняется соответствующий процесс. |
MainWmdowTitle |
Заголовок главного окна процесса (если нет главного окна — пустая строка). |
ProcessName |
Это свойство позволяет получать имя процесса (совпадает с именем приложения) |
Responding |
Отвечает ли приложение на запросы системы (не зависло ли оно) |
StartTime |
Время запуска процесса |
Threads |
Потоки процесса |
CloseMainWindow() |
Отправляет процессу с GUI сообщения о закрытии главного окна |
GetCurrentProcess() |
Возвращает текущий активный процесс |
GetProcesses() |
Возвращает списо выполняющихся в данный момент процессов |
Kill() |
Завершает соответствующий процесс |
Start () |
Запускает новый процесс (имеет несколько версий, позволяющих контролировать запуск, передавать приложению параметры и т.п.) |
Пример запуска приложения при помощи метода Start():
Process ieProc = null;
// Запустить Internet Explorer и перейти на страницу facebook.com.
ieProc = Process.Start("IExplore.exe", "www.facebook.com");
Console.ReadLine();
// Завершить процесс
ieProc.Kill();