当前位置 - 股票行情交易網 - 金融財經 - C#裏的應用程序域AppDomain是什麽?求直白的解釋。

C#裏的應用程序域AppDomain是什麽?求直白的解釋。

首先,描述壹下AppDomain是什麽:當壹個程序集被執行時,系統就會自動為其創建壹個AppDomain,每壹個AppDomain屬於某個進程,壹個進程內可以有多個AppDomain;每個AppDomain創建時都有個默認的名稱,該名稱就是加載的程序集的名稱(帶擴展名.exe)。

同壹windows 進程內的不同AppDomian之間可以互相***享資源,如:CLR,基本.NET類型,地址空間及線程。

程序集在AppDomain中的調用:在同壹進程內,如果不同的AppDomain調用同壹Assembly會有以下兩種情況:

1、會在每個AppDomain中加載該Assembly並為各AppDomain所調用;

2、會在該進程內,不在任何的AppDomain中單據加載該Assembly,然後同壹進程內的所有AppDomain都可以對其進行調用。這種方式加載的程序集(Assembly)稱為域無關(Domain Neutral)的。

AppDomain和線程的關系式正交的;n<--->n的關系。

註意當AppDomain加載了某個Assembly後就無法將其單獨卸載,不過可以講AppDomain卸載掉。

卸載AppDomain時CLR會卸載當前在該AppDomain執行的所有線程,如果此時在執行非托管代碼就可能產生問題,並且改AppDomain中所有的托管對象也會被垃圾回收器強制回收;

AppDomain的孤立性:

1)、壹個AppDomain可以獨立於其他的AppDomain被卸載掉;

2)、壹個AppDomain不能放問其他AppDomain內的Assembly和對象;

3)、若沒有發生跨邊界的異常拋出,壹個AppDomain擁有自己獨立的異常管理策略。這也就意味著同壹進程內的某壹AppDomain發生異常不會影響到其他的AppDomain。

4)、每個AppDomain可以定義獨自的程序集代碼訪問安全策略;

5)、每個AppDomain可以定義獨自的規則,以便在CLR加載前定位程序集的位置