Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процессы и домены






Любому запущенному приложению в операционной системе соответствует некий процесс. Процесс образует границы приложения, выделяя для приложения изолированное адресное пространство и поддерживая один или несколько потоков выполнения. Для работы с процессами в платформе.NET имеется класс System.Diagnostics.Process. Используя статические и экземплярные элементы этого класса можно получить информацию о текущем процессе, а также обо всех процессах системы.

Process current = Process.GetCurrentProcess();

foreach (Process p in Process.GetProcesses())

{

Console.WriteLine(" {0} {1} {2}",

p.Id, p.ProcessName, p.StartTime);

}

Класс Process позволяет управлять процессами (при наличии соответствующих привилегий). В следующем примере запускается приложение «Блокнот», которое завершается через 5 секунд.

Process p = Process.Start(" notepad.exe");

Thread.Sleep(5000);

p.Kill();

Платформа.NET вводит дополнительный уровень изоляции кода, называемый доменом приложения. Домены существуют внутри процессов и содержат загруженные сборки (можно создать сборку, разделяемую между доменами). Любой процесс запускает при старте домен по умолчанию, однако домены могут создаваться и уничтожаться в ходе работы в рамках процесса. Домены обеспечивают приемлемый уровень изоляции кода, но их создание менее затратное, чем создание отдельных процессов. Кроме того, домен можно уничтожить, не нарушая целостность работы всего процесса.

Рис. 13. Структура.NET-процесса с двумя доменами.

Домены приложений инкапсулированы в объектах класса System.AppDomain. Статическое свойство CurrentDomain позволяет получить информацию о текущем домене, а статические методы наподобие CreateDomain() – создать новый домен в рамках текущего процесса. После создания домена в него можно программно загрузить сборки, используя экземплярный метод Load(). Выгрузить сборки из домена нельзя, можно выгрузить весь домен:

AppDomain newDomain = AppDomain.CreateDomain(" New Domain");

newDomain.Load(" assemblyName");

AppDomain.Unload(newDomain);

Событие UnhandledException объекта AppDomain генерируется при возникновении в домене необработанного исключения:

AppDomain domain = AppDomain.CurrentDomain;

domain.UnhandledException +=

(sender, args) => Console.WriteLine(args.ExceptionObject);

 

// необработанное исключение генерирует событие UnhandledException

int x = 0;

int y = 10/x;

Домены содержат методы для создания экземпляров объектов требуемых типов (например, CreateInstance()). Однако доступ к созданным экземплярам нетривиален – фактически, это межпрограммное взаимодействие, для которого существуют специальные технологии.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.