裝載概觀
更新:2007 年 11 月
.NET Framework 2.0 版讓裝載 Common Language Runtime (CLR) 的應用程式,可以控制許多執行階段功能。您可以用自訂的實作 (Implementation) 取代某些功能,例如記憶體配置和組件的載入。您可以控制其他功能的行為、在執行階段接收事件的告知,以及管理應用程式定義域。
初始化及啟動裝載的執行階段
CorBindToRuntimeEx 函式會初始化執行階段,和舊版的執行階段一樣。您可以選擇要載入哪一個執行階段版本,但是一個處理序只能裝載一個版本。如果已載入 2.0 版,這個函式會傳回 ICLRRuntimeHost 介面,用來啟動執行階段及執行 Managed 程式碼。
注意事項: |
---|
在舊版中會傳回 ICorRuntimeHost 介面。 |
啟動執行階段的內容在將 Common Language Runtime 載入處理序中,執行 Managed 程式碼的內容在轉換為 Managed 裝載程式碼中會有詳細的討論。
裝載管理介面
在 .NET Framework 2.0 版中,CLR 可裝載管理介面以控制裝載之執行階段的許多功能、啟用裝載應用程式以實作執行階段所提供的其他管理介面,並可讓您實作自己的裝置管理介面。
為了進行探索,可將管理介面分為兩個廣泛的類型:
主應用程式所實作,且執行階段透過 IHostControl 介面所探索的管理介面。
CLR 所提供,且主應用程式透過 ICLRControl 介面所探索的管理介面。
下表根據介面所提供的功能種類來對介面進行分類,會先列出每一個群組中最重要的介面。
群組 |
功能 |
介面 |
---|---|---|
組件載入管理 |
可讓主應用程式 (Host) 自訂載入組件的位置、管理版本的方式,以及可以載入哪些格式的組件。例如,組件可以從資料庫載入,而不是從硬碟的檔案載入。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
原則管理 |
可讓主應用程式指定處理程式失敗的方式,以支援不同的可靠性需求。 主應用程式會使用 ICLRControl 介面存取執行階段管理員,並為執行階段傳回的失敗通知,實作 IHostPolicyManager 回呼 (callback)。 |
|
主應用程式保護管理 |
避免使用指定的型別或成員,讓主應用程式強制執行它自己的程式撰寫模型 (Programming Model)。例如,主應用程式可不允許使用執行緒或同步處理原始物件。 這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。 |
|
記憶體管理 |
以取代 CLR 用於配置記憶體的作業系統函式的方式,讓主應用程式控制記憶體配置。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
記憶體回收管理 |
可讓主應用程式實作方法,在記憶體回收開始和結束時接收通知。可讓主應用程式初始化集合、收集統計資料,並指定集合的某些特性。 這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
偵錯管理 |
可讓主應用程式探索是否已附加偵錯工具、提供額外的偵錯資訊以及自訂偵錯工作。 這個主應用程式會使用 ICLRControl 介面來存取執行階段管理員。 |
|
CLR 事件管理 |
可讓主應用程式註冊由 EClrEvent 所列舉的事件通知。 主應用程式會使用 ICLRControl 介面,存取執行階段管理員,並使用 IActionOnCLREvent 介面以實作事件處理常式。 |
|
工作管理 |
可讓主應用程式在執行緒於 Managed 和 Unmanaged 程式碼之間轉換時收到通知。可讓主應用程式控制執行緒相似性、啟動和結束工作的時機,以及如何排程執行緒。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
執行緒集區管理 |
可讓主應用程式針對要使用的執行階段實作它自己的執行緒集區。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
同步處理管理 |
可讓主應用程式針對要使用的執行階段實作它自己的同步處理基礎。主應用程式可以提供事件、關鍵區段 (Critical Section) 和號誌 (Semaphore)。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
|
I/O 完成管理 |
可讓主應用程式實作它自己的非同步 (Asynchronous) 輸入/輸出實作 (Implementation)。 此 CLR 使用 IHostControl 介面來探索主應用程式是否會實作這個介面群組。 |
注意事項: |
---|
如需舊版執行階段之裝載介面的詳細資訊,請參閱 .NET Framework 1.0 及 1.1 的裝載介面。 |
應用程式定義域管理員
如果是裝載 CLR 的程式,應用程式定義域會隔離各組件以提供更高的可靠性。可以藉由卸載應用程式定義域來從處理序卸載組件。
為了要管理多個應用程式定義域,.NET Framework 2.0 版提供了 AppDomainManager 類別當做基底類別 (Base Class),您可以從這個類別衍生您自己的應用程式定義域管理員。您為主應用程式 (Host Application) 設計的應用程式定義域管理員基本上是主應用程式的擴充功能 (以 Managed 程式碼撰寫),它會自動載入處理序內建立的每個應用程式定義域中。
應用程式定義域管理員可藉由排除 Managed 和 Unmanaged 程式碼之間的某些轉換而提高效能,它可以接收建立新應用程式定義域的告知,讓您有機會可以進行設定;應用程式定義域管理員也可為 Unmanaged 主應用程式提供一個方法來呼叫 Managed 程式碼。
請參閱
概念
將 Common Language Runtime 載入處理序