程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#裡的應用程序域AppDomain

C#裡的應用程序域AppDomain

編輯:C#基礎知識
首先,描述一下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加載前定位程序集的位置
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved