Clr Via C#讀書筆記---CLR寄宿和應用程式定義域

來源:互聯網
上載者:User

標籤:

#1 CLR寄宿

開發CLR時,Microsoft實際是將他實現成包含在一個dll中的COM伺服器。Microsoft為CLR定義了一個標準的COM介面,並為該介面和COM伺服器分配了GUID。安裝.NET Framework時,代表CLR的COM伺服器在Windows註冊表中註冊

任何Windows應用程式都可以寄宿CLR,非託管宿主應該調用MetaHost.h檔案中聲明的CLRCreateInstance函數,該函數是在MSCoreEE.dll檔案中實現的,該dll被稱為"墊片"(shim),主要用於決定建立哪個版本的CLR,本身不包含CLR COM伺服器

對於1.0,1.1和2.0,CLR代碼在MSCorWks.dll檔案中;對於4.0版本,CLR代碼在Clr.dll檔案中。

CLRCreateInstance函數可以返回一個ICLRMetaHost介面。宿主應用程式可以調用這個介面的GetRuntime函數,指定宿主要建立的CLR版本。然後,墊片將所需版本的CLR載入到宿主程式的進程中

GetRuntime函數返回一個指向非託管介面ICLRRuntimeInfo的指標,利用該介面的GetInterface方法獲得ICLRRuntimeHost介面。

隨著.NET Framework 4.0的發布,Microsoft支援在一個Windows進程中同時載入CLR v2.0和v4.0,允許為.NET Framework 2.0和4.0寫的不同組件同時運行。可以利用ClrVer.exe工具檢查在任何給定的進程中,載入了哪個(哪些)版本的CLR.

一個CLR載入到一個Windows進程中後,便永遠不能卸載,CLR從進程中卸載的唯一方式是終止進程,這導致Windows清理進程使用的所有資源,包括CLR在內。

#2 AppDomain:

CLR COM伺服器初始化時,會建立一個AppDomain。AppDomain是一組程式集的邏輯容器。CLR初始化時建立的第一個AppDomain稱為預設AppDomain,這個預設的AppDomain只有在Windows進程終止時才會被銷毀。

AppDomain唯一的作用就是進行隔離:

一個AppDomain中的代碼建立的對象不能由另一個AppDomain中的代碼直接存取,只能使用"按引用封送"或者"按值封送"的語義。

AppDomain可以卸載、可以單獨保護、可以單獨實施配置。

Clr Via C#讀書筆記---CLR寄宿和應用程式定義域

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.