Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5636 / 790 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 15:

Потоки

Домен приложения

Выполнение приложений .NET начинается с запуска .NET Framework. Это процесс со своими потоками, специальными атрибутами и правилами взаимодействия с другими процессами. Приложения .NET выполняются в ОДНОМ процессе. Для этих приложений процесс .NET Framework играет роль, аналогичную роли операционной системы при обеспечении выполнения процессов.

Выполняемые в процессе .NET Framework .NET-приложения также изолируются друг от друга. Средством изоляции .NET-приложений являются домены приложений.


Домен приложения изолирует (на логическом уровне) выполняемые приложения и используемые в его рамках ресурсы. В процессе .NET Framework может выполняться множества доменов приложений. При этом в рамках одного домена может выполняться множество потоков.

Функциональность и основные свойства домена приложения реализуются в классе System.AppDomain.

Методы класса System.AppDomain Описание
CreateDomain() Статический. Создает новый домен приложения
GetCurrentThreadId() Статический. Возвращает Id текущего потока
Unload() Статический. Для выгрузки из процесса указанного домена приложения
BaseDirectory Свойство. Возвращает базовый каталог, который используется РАСПОЗНАВАТЕЛЕМ для поиска нужных приложению сборок
CreateInstance() Создает объект заданного типа, определенного в указанной сборке
ExecuteAssembly() Запускает на выполнение сборку, имя которой было указано в качестве параметра
GetAssemblies() Возвращает список сборок, загруженных в текущий домен приложения
Load() Загружает сборку в текущий домен приложения

Таким образом, множество выполняемых .NET-приложений ограничены объектами – представителями класса System.AppDomain.

Домен обеспечивает выполнение приложения. Приложение может "провести инспекцию пограничной службы", то есть получить доступ к объекту-домену.

Пример. Приложение-инспектор. Получает ссылку на текущий домен приложения (свой собственный домен) и исследует некоторые свойства домена:

using System;
 namespace Domains_00
 {
 class Class1
 {
 static void Main(string[] args)
 {
 AppDomain appD1 = System.AppDomain.CurrentDomain; 
 AppDomain appD2 = System.Threading.Thread.GetDomain();

if (AppDomain.ReferenceEquals(appD1,appD2))
 Console.WriteLine
  ("The same! {0}, {1}.",appD1.FriendlyName,appD2.FriendlyName); 
else
Console.WriteLine
  ("Different! {0}, {1}.",appD1.FriendlyName,appD2.FriendlyName); 
if (null != appD1.DynamicDirectory) 
    Console.WriteLine("{0}",appD1.DynamicDirectory); 
else
    Console.WriteLine("No DynamicDirectory.");

if (null != appD1.RelativeSearchPath) 
    Console.WriteLine("{0}",appD1.RelativeSearchPath); 
else
    Console.WriteLine("No RelativeSearchPath."); 
 }
 }
 }

Таким образом, ссылка на текущий домен может быть получена:

  • как значение статического свойства System.AppDomain.CurrentDomain ;
  • как результат выполнения метода System.Threading.Thread.GetDomain():

В рамках процесса (процесса .NET Framework) может быть создано множество доменов (объектов-доменов), причем новые домены можно создавать непосредственно в ходе выполнения .NET-приложения. Порождение новых доменов обеспечивается четверкой статических перегруженных методов – членов класса AppDomain с именем CreateDomain.

  • Создается новый домен приложения с именем, заданным строкой-параметром:
    public static AppDomain CreateDomain(string);
  • Создается новый домен приложения с именем, заданным строкой-параметром, в рамках существующей политики безопасности:
    public static AppDomain CreateDomain(string, Evidence);
  • Создается новый домен приложения с использованием the specified name, evidence, and application domain setup information:
    public static AppDomain CreateDomain(string, Evidence, AppDomainSetup);
  • Создается новый домен приложения с именем, заданным строкой-параметром, в рамках существующей политики безопасности, указанием базового каталога, в котором проводит поиск распознаватель сборок, указанием базового каталога для поиска закрытых сборок, флагом управления загрузкой сборки в домен приложения:
    public static AppDomain CreateDomain(string, Evidence, string, string, bool);
kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2