System.AppDomain類詳解(二)

来源:http://www.cnblogs.com/wmcoder/archive/2016/01/30/5171019.html
-Advertisement-
Play Games

進程是存在獨立的記憶體和資源的,但是AppDomain僅僅是邏輯上的一種抽象。一個process可以存在多個AppDomain。各個AppDomain之間的數據時相互獨立的。一個線程可以穿梭多個AppDomain。 一、屬性 ActivationContext 獲取當前應用程式域的激活上下文。Appl


  進程是存在獨立的記憶體和資源的,但是AppDomain僅僅是邏輯上的一種抽象。一個process可以存在多個AppDomain。各個AppDomain之間的數據時相互獨立的。一個線程可以穿梭多個AppDomain。

一、屬性

ActivationContext           獲取當前應用程式域的激活上下文。
ApplicationIdentity           獲得應用程式域中的應用程式標識。
ApplicationTrust            獲取說明授予應用程式的許可權以及應用程式是否擁有允許其運行的信任級別的信息。
BaseDirectory              獲取基目錄,它由程式集衝突解決程式用來探測程式集。
CurrentDomain              獲取當前 Thread 的當前應用程式域。
DomainManager             獲得初始化應用程式域時主機提供的域管理器。
DynamicDirectory             獲取目錄,它由程式集衝突解決程式用來探測動態創建的程式集。
Evidence                獲取與該應用程式域關聯的 Evidence。
FriendlyName              獲取此應用程式域的友好名稱。
Id                     獲得一個整數,該整數唯一標識進程中的應用程式域。
IsFullyTrusted               獲取一個值,該值指示載入到當前應用程式域的程式集是否是以完全信任方式執行的。
IsHomogenous              獲取一個值,該值指示當前應用程式域是否擁有一個為載入到該應用程式域的所有程式集授予的許可權集。
MonitoringIsEnabled           獲取或設置一個值,該值指示是否對當前進程啟用應用程式域的 CPU 和記憶體監視。 一旦對進程啟用了監視,則無法將其禁用。
MonitoringSurvivedMemorySize       獲取上次完全阻止回收後保留下來的、已知由當前應用程式域引用的位元組數。
MonitoringSurvivedProcessMemorySize   獲取進程中所有應用程式域的上次完全阻止回收後保留下來的總位元組數。
MonitoringTotalAllocatedMemorySize    獲取自從創建應用程式域後由應用程式域進行的所有記憶體分配的總大小(以位元組為單位,不扣除已回收的記憶體)。
MonitoringTotalProcessorTime       獲取自從進程啟動後所有線程在當前應用程式域中執行時所使用的總處理器時間。
PermissionSet        獲取沙盒應用程式域的許可權集。
RelativeSearchPath     獲取基目錄下的路徑,在此程式集衝突解決程式應探測專用程式集。
SetupInformation     獲取此實例的應用程式域配置信息。
ShadowCopyFiles     獲取應用程式域是否配置為影像副本文件的指示。

 1 public class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             AppDomain appdomain = AppDomain.CurrentDomain;      //獲取當前 Thread 的當前應用程式域。
 6             Console.WriteLine(appdomain.Id);    //輸出 1  獲得一個整數,唯一標識進程中的應用程式域。
 7             Console.WriteLine(appdomain.ActivationContext);     //輸出 空白  獲取當前應用程式域的激活上下文。
 8             Console.WriteLine(appdomain.ApplicationIdentity);   //輸出 空白 獲得應用程式域中的應用程式標識。
 9 
10             ApplicationTrust AT = appdomain.ApplicationTrust;   //獲取說明授予應用程式的許可權以及應用程式是否擁有允許其運行的信任級別的信息。
11             Console.WriteLine(appdomain.ApplicationTrust);      //輸出 System.Security.Policy.ApplicationTrust    
12 
13             Console.WriteLine(appdomain.BaseDirectory);         //輸出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ 獲取基目錄,它由程式集衝突解決程式用來探測程式集。
14 
15             AppDomainManager Adm = appdomain.DomainManager;     //獲得初始化應用程式域時主機提供的域管理器。
16             Console.WriteLine(Adm.EntryAssembly.Location);      //輸出 F:\xxx\xxx\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
17             Console.WriteLine(appdomain.DomainManager);         //輸出 Microsoft.VisualStudio.HostingProcess.VSHostAppDomainManager
18 
19             Console.WriteLine(appdomain.DynamicDirectory);      //輸出 空白 獲取目錄,它由程式集衝突解決程式用來探測動態創建的程式集。
20 
21             Evidence ed = appdomain.Evidence;                   //另外一個東西了 獲取與該應用程式域關聯的 Evidence。
22             Console.WriteLine(appdomain.Evidence.ToString());   //輸出 System.Security.Policy.Evidence
23 
24             Console.WriteLine(appdomain.FriendlyName);          //輸出 ConsoleApplication1.vshost.exe  獲取此應用程式域的友好名稱。
25 
26             Console.WriteLine(appdomain.IsFullyTrusted);        //輸出 True 獲取一個值,該值指示載入到當前應用程式域的程式集是否是以完全信任方式執行的。
27 
28             Console.WriteLine(appdomain.IsHomogenous);          //輸出 True 獲取一個值,該值指示當前應用程式域是否擁有一個為載入到該應用程式域的所有程式集授予的許可權集。
29 
30             Console.WriteLine(AppDomain.MonitoringIsEnabled);   //輸出 False 獲取或設置一個值,該值指示是否對當前進程啟用應用程式域的 CPU 和記憶體監視。 一旦對進程啟用了監視,則無法將其禁用。
31 
32             AppDomain.MonitoringIsEnabled = true;
33             //要上面那個屬性啟用之後,這個屬性才能用
34             Console.WriteLine(appdomain.MonitoringSurvivedMemorySize);  //輸出 0 獲取上次完全阻止回收後保留下來的、已知由當前應用程式域引用的位元組數。
35             Console.WriteLine(appdomain.MonitoringTotalAllocatedMemorySize);    //輸出 0 獲取自從創建應用程式域後由應用程式域進行的所有記憶體分配的總大小(以位元組為單位,不扣除已回收的記憶體)。
36             Console.WriteLine(appdomain.MonitoringTotalProcessorTime);  //輸出 00:00:00 獲取自從進程啟動後所有線程在當前應用程式域中執行時所使用的總處理器時間。
37 
38             System.Security.PermissionSet ps = appdomain.PermissionSet;     //獲取沙盒應用程式域的許可權集。
39 
40             Console.WriteLine(appdomain.PermissionSet.ToString());      //輸出 <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/>
41 
42             Console.WriteLine(appdomain.RelativeSearchPath);    //輸出 空白
43 
44             Console.WriteLine(appdomain.SetupInformation);      //輸出 AppDomainSetup 獲取此實例的應用程式域配置信息。
45 
46             Console.WriteLine(appdomain.ShadowCopyFiles);       //輸出 False
47 
48             File.WriteAllText(@"D:\123.txt", appdomain.PermissionSet.ToString());   
49 
50             //SetupInformation    獲取此實例的應用程式域配置信息。
51             //ShadowCopyFiles    獲取應用程式域是否配置為影像副本文件的指示。
52 
53             Console.ReadKey();
54         }

二、方法

名稱 說明
ApplyPolicy             返回應用策略後的程式集顯示名稱。
CreateComInstanceFrom(String, String) 創建指定 COM 類型的新實例。 形參指定文件的名稱,該文件包含含有類型和類型名稱的程式集。
CreateDomain(String)        使用指定的名稱新建應用程式域。
CreateInstance(String, String)   創建在指定程式集中定義的指定類型的新實例。
CreateInstanceAndUnwrap(String, String) 創建指定類型的新實例。 形參指定定義類型的程式集以及類型的名稱。
CreateInstanceFrom(String, String)   創建在指定程式集文件中定義的指定類型的新實例。
CreateObjRef               創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。)
DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)   以指定名稱和訪問模式定義動態程式集。
DoCallBack           在另一個應用程式域中執行代碼,該應用程式域由指定的委托標識。
ExecuteAssembly(String)     執行指定文件中包含的程式集。
ExecuteAssemblyByName(String)     在給定其顯示名稱的情況下執行程式集。
GetAssemblies      獲取已載入到此應用程式域的執行上下文中的程式集。
GetData         為指定名稱獲取存儲在當前應用程式域中的值。
GetLifetimeService      檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。)
InitializeLifetimeService   通過防止創建租約來給予 AppDomain 無限生存期。 (重寫 MarshalByRefObject.InitializeLifetimeService()。)
IsCompatibilitySwitchSet  獲取可以為 null 的布爾值,該值指示是否設置了任何相容性開關,如果已設置,則指定是否設置了指定的相容性開關。
IsDefaultAppDomain      返回一個值,指示應用程式域是否是進程的預設應用程式域。
IsFinalizingForUnload     指示此應用程式域是否正在卸載以及公共語言運行時是否正在終止該域包含的對象。
Load(AssemblyName)    在給定 AssemblyName 的情況下載入 Assembly。
ReflectionOnlyGetAssemblies   返回已載入到應用程式域的只反射上下文中的程式集。
SetData(String, Object)   為指定的應用程式域屬性分配指定值。
SetData(String, Object, IPermission)   將指定值分配給指定應用程式域屬性,檢索該屬性時要求調用方具有指定許可權。
SetPrincipalPolicy      指定在此應用程式域中執行時如果線程嘗試綁定到用戶,用戶和標識對象應如何附加到該線程。
SetThreadPrincipal     設置在以下情況下要附加到線程的預設主體對象,即當線程在此應用程式域中執行時,如果線程嘗試綁定到主體這種情況。
Unload           卸載指定的應用程式域。

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             AppDomain app = AppDomain.CreateDomain("測試程式域");    //使用指定的名稱創建應用程式域
 6             ObjectHandle objHan = app.CreateInstance("MySpace", "MySpace.Person");  //創建指定程式集中指定的對象
 7             var obj = objHan.Unwrap();
 8             Console.WriteLine(obj.ToString());  //輸出 MySpace.Person
 9 
10             object obj2 = app.CreateInstanceAndUnwrap("MySpace","MySpace.Person");  //創建指定程式中指定的對象,順帶執行了Unwrap方法
11             Console.WriteLine(obj2.ToString()); //輸出 MySpace.Person
12 
13             ObjectHandle objHan2 = app.CreateInstanceFrom(@"D:\MySpace.dll", "MySpace.Person"); //從指定的程式集中創建類的對象
14             object obj3 = objHan2.Unwrap();
15             Console.WriteLine(obj3.ToString()); //輸出 MySpace.Person
16 
17             //app.CreateObjRef();
18 
19             app.ExecuteAssembly(@"D:\ConsoleApplication1.exe");     //執行指定文件中包含的程式集 輸出0123456789
20             //D:\ConsoleApplication1.exe的代碼如下
21             //static void Main(string[] args)
22             //{
23             //    for (int i = 0; i < 10; i++)
24             //    {
25             //        Console.WriteLine(i);
26             //    }
27 
28             //    Console.ReadKey();
29             //}
30 
31             //下麵改動一下D:\ConsoleApplication1.exe,改為在D盤下創建一個文件,並寫入一段文字
32             app.ExecuteAssembly(@"D:\ConsoleApplication1.exe");     //運行之後在D盤下創建了一個文件,並寫入文字
33             //static void Main(string[] args)
34             //{
35             //    File.WriteAllText(@"D:\AppDomainTest.txt","測試測試");
36             //    Console.ReadKey();
37             //}
38             //註意,此次由於有Console.ReadKey(); 因此執行到這裡要按兩次鍵盤,讓app程式域執行完畢才會又回到主程式域
39             Assembly[] assArr = app.GetAssemblies();    //獲取載入到app應用程式域中的所有程式集
40             
41             foreach (var ass in assArr)
42             {
43                 Console.WriteLine(ass.FullName);    //諸如此類 ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
44             }
45 
46             //給定Assembly的情況下裝載程式集
47             app.Load("MySpace");
48             Console.WriteLine(app.IsDefaultAppDomain());  //輸出 False    是否是進程預設的應用程式域
49 
50             app.SetData("data1", "我靠"); //為指定的應用程式域屬性分配指定值。
51             object o = app.GetData("data1");
52             Console.WriteLine(o.ToString());    //輸出 我靠
53 
54             //ApplyPolicy    返回應用策略後的程式集顯示名稱。
55             //CreateComInstanceFrom(String, String)    創建指定 COM 類型的新實例。 形參指定文件的名稱,該文件包含含有類型和類型名稱的程式集。
56             //CreateObjRef    創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。)
57             //DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)    以指定名稱和訪問模式定義動態程式集。
58             //DoCallBack    在另一個應用程式域中執行代碼,該應用程式域由指定的委托標識。
59             //ExecuteAssemblyByName(String)    在給定其顯示名稱的情況下執行程式集。
60             //GetLifetimeService    檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。)
61             //InitializeLifetimeService    通過防止創建租約來給予 AppDomain 無限生存期。 (重寫 MarshalByRefObject.InitializeLifetimeService()。)
62             //IsCompatibilitySwitchSet    獲取可以為 null 的布爾值,該值指示是否設置了任何相容性開關,如果已設置,則指定是否設置了指定的相容性開關。
63             //IsFinalizingForUnload    指示此應用程式域是否正在卸載以及公共語言運行時是否正在終止該域包含的對象。
64             //ReflectionOnlyGetAssemblies    返回已載入到應用程式域的只反射上下文中的程式集。
65             //SetPrincipalPolicy    指定在此應用程式域中執行時如果線程嘗試綁定到用戶,用戶和標識對象應如何附加到該線程。
66             //SetThreadPrincipal    設置在以下情況下要附加到線程的預設主體對象,即當線程在此應用程式域中執行時,如果線程嘗試綁定到主體這種情況。
67             //Unload    卸載指定的應用程式域。
68 
69             Console.ReadKey();
70         }
71     }

  詳細參考:http://www.cnblogs.com/kissdodog/archive/2013/05/09/3069553.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 火車票上*號打的是月,日,理論上的有最大366種組合; 2. 校驗碼是最後的一位,0-9及X,11個結果; 3. 那麼,通過火車票上的身份證號,可以得到33個左右真正的有效身份證號; 4. 如果你能知道對方的星座(嗯,大家不是經常曝自己是什麼星座麽),那麼,再將這30多個結果映射到12個星座中
  • 本文要提供的類可以為圖片加文字水印,以及判斷是否是圖片文件。經過測試可運行,例子請下載:http://hovertree.com/h/bjaf/5qc5eh6y.htm例子效果圖: 以下是HovercWarter類的代碼: 1 using System.Drawing; 2 using System
  • 本將主要介紹 內連接與 外連接 1.join Linq to sql from a in Blog_Users join b in Blog_UserInfo on a.UserId equals b.ID select new { 昵稱=a.NickName, 真實名=b.RealName } s...
  • 一、本將主要介紹內容 從linq,sql,lambda三個角度比較來學習 select、orderby、分頁、group by、distinct、子查詢、in的用法 1.select 查詢用戶和它們的自我介紹 Linq to sql from a in Blog_UserInfo select ne...
  • 1、下載memcache。 下載地址 http://www.2cto.com/uploadfile/2012/0713/20120713110240777.zip 2、安裝memcache。 3、安裝好後,打開任務管理器就能看到memcache服務了。 4 、memcache基本命令。
  • 今天做網站的時候,用到了分頁技術,我把使用方法記錄下來,以便日後查閱以及幫助新手朋友們。 DataList控制項可以按照列表的形式顯示數據表中的多行記錄,但是被顯示的多行記錄沒有分頁功能,使用起來不太方便。因此需要藉助PagedDataSource類來實現分頁,該類封裝了數據控制項的分頁屬性,其常用屬性
  • 我們知道在win10手機上和平板上都會有後退鍵,那麼PC上該怎麼辦呢?沒關係我們慢慢揭曉。 如果你已經是UWP的忠實用戶,那麼肯定會見到如下的後退鍵。 那麼我們如何來做出來呢?, 我們首先打開App.xaml.cs文件,在OnLaunched方法中Frame對象初始化完畢以後訂閱Navigated事
  • 通過調用分頁存儲過程,實現數據源分頁。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...