框架設計 CLR寄宿和應用程式域

2022-02-07 00:13:51 字數 2102 閱讀 7493

概述:認識什麼是clr寄宿和應用程式域?

clr寄宿:允許任何應用程式域使用clr的特徵。允許已有的應用程式至少區域性使用託管**程式設計,並為應用程式提供通過程式設計支援自定義和可擴充套件性的能力。應用程式域:允許第三方信任的**在已存在的程序中執行,並保證應用程式的資料結構,**以及安全上下文不被利用或不遭受安全風險。

c#實現佇列讀寫操作(一)

變化多端的列表(二)

vs自動記憶體管理(垃圾**集)(三)

c#忽略基礎知識點梳理(四)

什麼是框架的介面(五)

程式集的載入與反射(六)

clr寄宿和應用程式域(七)

異常(八)

認識什麼是clr寄宿和應用程式域?

clr寄宿:允許任何應用程式域使用clr的特徵。允許已有的應用程式至少區域性使用託管**程式設計,並為應用程式提供通過程式設計支援自定義和可擴充套件性的能力。

應用程式域:允許第三方信任的**在已存在的程序中執行,並保證應用程式的資料結構,**以及安全上下文不被利用或不遭受安全風險。

clr寄宿:

任何windows應用程式都可以寄宿,寄宿程式可以呼叫介面中定義的方法來設定下述各項:

1設定宿主管理器,告訴clr宿主希望參與記憶體分配,執行緒排程和同步,程式集載入等決定。

2獲取clr管理器,告訴clr阻止使用某些類或成員。以及發生某個事件宿主應呼叫哪個方法。

3初始化並啟動clr。

4引導程式集並執行程式集中的**。

5停止clr,從而阻止任何託管**在windows中執行。

任何寄宿clr的應用程式幫助開發人員提供的便利問題:

1,可以選擇任意喜歡的程式語言

2,**被jit編譯,加快速度。

3,**使用垃圾收集器,避免記憶體洩漏和破壞。

4,**在安全的殺向中進行。

應用程式域:

當clr com伺服器開始初始化時,就會建立乙個應用程式域。乙個應用程式域是一組程式集的邏輯容器。clr初始化時建立的第乙個應用程式稱為預設程式域。該程式域只有程序終止時才會被銷毀。應用程式域的全部目的在於提供隔離性。

應用程式域的特徵如下:

1乙個應用程式域中的**建立的物件不能被另乙個應用程式域的**訪問。(如果訪問只能通過按引用封存處理或按值封存處理訪問)這種隔離的好處在於執行或解除安裝乙個程序不會影響其他程序正常工作。

2應用程式域可以被解除安裝。一旦解除安裝,整個程式集都被解除安裝。

3應用程式域可以單獨實施安全策略。

4應用程式域可以單獨實施配置策略。

關於乙個寄宿了clr和兩個應用程式域的windows程序問題:

單獨的windows程序中,該程序執行乙個clr  com伺服器,該clr當前管理另個應用程式域,每個應用程式域都有自己的載入器堆,載入器堆維護自應用程式建立以來被訪問的型別記錄。每個型別物件都是乙個方法表,對方法中每條條目,如果其中的方法至少被執行過一次,那麼它將執行jit編譯後的本地**。

createdomain(「程式網域名稱稱」,null,null)

marshalbyreftype(引用封裝處理)

marshalbyvaluetype(值封裝處理)

notmarshalableftype(不用封裝處理)

creatrinstanceandunwrap(指定程式集,"marshalbyreftype(指定型別)")

應用程式域的解除安裝:

通過以下步驟解除安裝指定應用程式域:

1clr掛起程序中所有執行過託管**的執行緒。

2clr檢查所有執行緒堆可能返回到即將被解除安裝的應用程式域中的**。

3第二步發現所有執行緒離開應用程式域後,clr接著遍歷載入器堆,並為每個引用已解除安裝應用程式域所建立物件的**物件設定標記。

4clr強制執行垃圾收集,**被已解除安裝應用程式域建立的任何物件占用的記憶體,通過finalize方法**

5clr恢復餘下所有執行緒的執行。

宿主如何使用應用程式域:

呼叫乙個託管堆的可執行檔案時,墊片檢查包含在應用程式集中的clr頭資訊,頭資訊指出構建和測試應用程式時所使用的clr的版本,墊片使用該資訊來確定程序中載入哪個版本的clr。當clr載入並完成初始化後,墊片會再次檢查程式集clr頭資訊。從而決定哪個方法是程式入口點,clr呼叫這個方法,應用程式就啟動開始執行。

程式集和應用程式域

程式集是一組型別和資源的集合,是乙個邏輯功能單元,多個程式集協同工作完成一定的功能。當前主要指.dll檔案或.exe 檔案 程式集清單是程式集的一部分,包含程式集名 程式版本資訊 程式集中所有檔案的列表 型別引用資訊等等 程式集可分為單檔案程式集 例如包含乙個.dll檔案 和多檔案程式集 例如包含乙...

翻譯 應用程式池和應用程式域的區別

應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...

翻譯 應用程式池和應用程式域的區別

應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...