国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

.NET CRL程序載入原理大揭秘

開發 后端
本文介紹了.NET CRL程序載入原理分析,在一個.NET CRL下的可執行程序的啟動過程可以分為三個步驟,哪三個步驟本文給出全面的解析。

.NET這個詞語對我們不陌生吧,而.Net平臺下CLR程序程序怎么載入呢?這個有有些人就步知道了,在這里給大家分析以下原理。與傳統的Win32可執行程序中的本機代碼(Native Code)不同,微軟推出的.Net架構中,可執行程序的代碼是以類似Java Byte Code的 IL (Intermediate Language)偽代碼形式存在的。在.Net可執行程序載入后,IL代碼由CLR (Common Language Runtime)從可執行文件中取出, 交由JIT (Just-In-Time)編譯器,根據相應的元數據(Metadata),實時編譯成本機代碼后執行。
 
因此,一個.NET CRL下的可執行程序的啟動過程可以分為三個步驟。
首先,Windows的可執行程序載入器(OS Loader)載入 PE (Portable Executable)結構的可執行文件映像(PE Image),將執行權傳遞給CLR的支持庫中的Unmanaged Code。
其次,啟動或使用現有的CLR引擎,建立新的應用域(Application Domain),將配件(Assembly)載入到此應用域中。
最后,將執行權從Unmanaged Code傳遞給Managed Code,執行配件的代碼。

下面我將詳細說明以上步驟。
 
自從Win95發布以來,可執行程序的PE結構就沒有發生大的改動。此次.Net平臺發布,也只是利用了PE結構中現有的預留空間,以保持PE結構的穩定,最大程度保持向后兼容。CLR程序在編譯后,將可執行程序入口直接以一個間接跳轉指令 ,指向mscoree.lib中的_CorExeMain函數(DLL將入口指向_CorDllMain函數)。因此CLR可執行程序在被OS Loader載入后,將_CorExeMain函數處理CLR引擎 ,啟動事宜。此函數將啟動或使用一個現有的CLR Host來加載IL代碼。常見的CLR Host有ASP.Net、IE、Shell、數據庫引擎等等,他們的作用是啟動一個CLR實例,管理在此CLR實例中運行的CLR程序。我們接著來看一看一個CLR Host是如何實際運作的。

CLR作為一個引擎,在同一臺計算機上是可以存在多個版本的,不同版本之間可以通過配置良好共存。在 %windir%\Microsoft.NET\Framework (%windir%表示Windows系統目錄所在位置)目錄下我們可以看到以版本號為目錄名的多個CLR版本, 如%windir%\Microsoft.NET\Framework\v1.0.3705等等,也可以在注冊表的

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.0  

鍵下查看詳細的版本兼容性.Name是Build號,Value是兼容的Build號. 而每一個CLR版本又分為Server和Workstation兩類運行庫, 我們等會講創建.NET CLR時會詳細談到. CLR Host在啟動CLR之前,必須通過一個startup shim的庫進行操作, 實際上就是mscoree.dll,他提供了版本無關的操作函數,以及啟動CLR所需 的支持,如CorBindToRuntimeEx函數. CLR Host通過shim的支持庫,將CLR引擎載入到進程中.具體函數如下

  1. STDAPI CorBindToRuntimeEx(LPCWSTR pwszVersion,   
  2. LPCWSTR pwszBuildFlavor, DWORD startupFlags,   
  3. REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv);  

參數pwszVersion指定要載入的CLR版本號,注意必須在前面帶一個小寫的"v", 如"v1.0.3705",可以通過查閱前面提到的注冊表鍵,獲取當前系統安裝的不同CLR 版本情況,或指定固定的CLR版本.也可以遞NULL給這個參數,系統將自動選擇最新版本的CLR載入. 參數pwszBuildFlavor則指定載入的CLR類型,"srv"和"wks". 前者適用于多處理器的計算機,能夠利用多CPU提高并行性能.對單CPU系統而言,無論指定哪種類型都會載入"wks",傳遞NULL也是如此. 參數startupFlags是一個組合參數.由多個標志位組成. STARTUP_CONCURRENT_GC標志指定是否使用并發的GC(Garbage Collection) 機制,使用并發GC能夠提高系統的用戶界面相應效率,適合窗口界面使用較多的程序. 但并發GC會因為無謂的線程上下文(Thread Context)切換損失效率.

以下三個參數用于指定配件載入優化策略.我們等會詳細討論.

  1. STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN = 0x1 << 1,   
  2. STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN  = 0x2 << 1,   
  3. STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST = 0x3 << 1,  

接著的三個參數用于獲取ICorRuntimeHost接口.

實際調用實例如下.

  1. CComPtr<ICorRuntimeHost> spHost;   
  2. CHECK(CorBindToRuntimeEx(NULL, L"wks",   
  3. STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN | STARTUP_CONCURRENT_GC,   
  4. CLSID_CorRuntimeHost, IID_ICorRuntimeHost, (void **)&spHost)); 

這行代碼載入最高版本CLR的wks類型運行庫,為單應用域進行優化并使用并發GC機制. 前面提到了配件載入優化策略,要理解這個概念,我們必須先了解應用域的概念. 傳統Win程序中,資源的分配管理單位是進程,操作系統以進程邊界將應用程序實例隔離開, 單個進程的崩潰不會對其他進程產生直接影響,進程也不能直接使用其他進程的資源. 進程很好,但使用進程的代價太大,為此Win32引入了線程的概念.同一進程中的線程能夠共享資源,線程管理和切換的代價也遠遠小于進程.但因為在同一進程中,線程的崩潰會直接影響到其他線程的運行,也無法約束線程間數據的直接訪問等等. 為此,CLR Application Domain應用域的概念.應用域是介于進程和線程之間的一種邏輯上的概念.他既有線程輕巧,管理切換快捷的優點,也有進程在穩定性方面的優點,單個應用域的崩潰不會直接影響到同一進程中的其他應用域,應用域也無法直接訪問同一進程中的其他應用域的資源,這方面和進程完全相同. 而.NET CLR的管理就是完全面向應用域一級.CLR不能卸載(Unload)某個類型或配件, 必須以應用域為單位啟動/停止代碼,獲取/釋放資源.

CLR在執行一個配件時,會新建一個應用域,將此配件放入新的應用域.如果多個應用域同時使用到一個配件,就要涉及到前面提到的配件載入優化策略了.最簡單的方法是使用

STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN標志,每個應用域擁有一份獨立的配件的鏡像,這樣速度最快,管理最方便,但占用內存較多.相對的是所有應用域共享一份配件的鏡像,(使用STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN標志) 這樣節約內存,但在此配件中存在靜態變量等數據時,因為要保證每個應用域有獨立的數 據, 所以會一定程度上影響效率.折中的方案是使用 (使用STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST標志) 此時,只有那些有Strong Name的配件才會被多個應用域共享.

這里又涉及到一個概念Strong Name.他是一個配件的身份證明,他由配件的 名字/版本/culture以及數字簽名等組成.在配件發布時用以區別不同版本. 也在安全/版本控制等方面起到重要作用,以后有機會會專門講解.暫且跳過. 獲取了ICorRuntimeHost接口的指針后,我們可以以此指針取得當前/缺省應用域,
并可枚舉CLR引擎實例中所有的應用域.

【編輯推薦】

  1. SQL SERVER 2005 CLR集成之簡單SQL函數講解
  2. 代碼演示CLR Via C#如何調用靜態構造函數
  3. 概述講解SQL Server 2005 CLR集成執行功能
  4. 簡單概述SQLCLR CAS權限集
  5. 全面講解CLR安全性
責任編輯:田樹 來源: 教程在線
相關推薦

2010-02-02 18:34:00

Python

2009-11-04 13:51:46

ADO.NET性能

2009-10-29 10:34:31

ADO.NET使用技巧

2023-06-26 18:03:26

btrace 2.0開源

2010-01-22 14:53:21

2021-01-18 18:15:00

GitHub 技術開發

2018-09-18 15:57:44

機器學習ML神經網絡

2009-11-10 11:01:05

VB.NET事件

2021-05-13 23:30:17

JavaScript 原理揭秘

2017-07-06 08:21:27

VSAN加密虛擬機

2017-08-24 09:19:20

分解技術揭秘

2009-05-28 10:12:04

2017-07-05 16:43:52

VSAN加密虛擬化

2016-02-29 16:54:10

OpenStack混合云應用軟件定義基礎設施

2025-07-03 09:47:52

2013-04-22 11:13:06

程序員編程誤區

2019-11-15 15:12:19

Windows激活KMS

2011-12-19 20:49:16

Apple

2010-05-20 18:52:06

Eclipse使用SV

2010-08-23 09:45:54

Windows Azu云計算微軟
點贊
收藏

51CTO技術棧公眾號

av在线免费播放网站| 日本高清网站| 日本亚洲不卡| 国产亚洲欧洲高清| www免费在线观看视频| 亚洲欧美卡通另类91av| 日韩欧美亚洲范冰冰与中字| 91精品国产高清久久久久久| av小次郎在线| 欧美日本在线一区| 黄色免费网址大全| 日韩电影在线看| 国产经品一区二区| 妖精视频一区二区三区免费观看| 亚洲成人黄色在线| 精品自拍一区| 欧美性猛交xxxx免费看漫画| 91免费国产网站| 国产a久久精品一区二区三区 | 99成人在线| 91久久精品国产91久久| 草草影院在线| 精品成人免费观看| а√在线中文网新版地址在线| 欧美性xxxx极品hd欧美风情| 日韩porn| 亚洲激情视频在线观看| 国产美女在线观看| 欧美亚洲综合另类| 亚洲www色| 欧美精品欧美精品系列| 日韩不卡av| 在线观看欧美日韩电影| 丁香另类激情小说| 在线综合视频播放| 女人帮男人橹视频播放| 日本大胆人体视频| 高清日韩电视剧大全免费| 日韩a级在线观看| 91麻豆成人久久精品二区三区| 91嫩草在线视频| 国产一区二区三区不卡视频网站| 成人国产精品| 中文字幕日韩欧美在线视频| 91麻豆精品国产综合久久久 | 视频在线观看91| 亚洲 高清 成人 动漫| 91色视频在线| 日本一级在线观看| 亚洲人成电影网| 色喇叭免费久久综合网| 成年人视频大全| 国产视频一区二区在线| 秋霞福利视频| 欧美日韩日本国产| 黄色在线网站| 精品国产乱码久久久久久闺蜜| 中文.日本.精品| 91精品久久久久久蜜桃| 日本a级不卡| 久久99中文字幕| 一本大道久久a久久精品综合| 国产经典一区| 青青草国产免费| 欧美丰满少妇xxxbbb| 欧美日一区二区| 国产日韩欧美大片| 欧美日韩国产另类不卡| 偷拍亚洲精品| 久热精品视频| 欧美激情第一页xxx| 五月婷婷在线视频| 96精品视频在线| 日韩精品一卡二卡三卡四卡无卡| 国产精品劲爆视频| 成人综合在线视频| 国产精品久久麻豆| 91精品国产沙发| 精品在线一区二区| 国内三级在线观看| 欧美极品少妇xxxxⅹ免费视频| 亚洲精品资源| 蜜芽视频在线观看| 51ⅴ精品国产91久久久久久| 国产另类ts人妖一区二区| 99热在线看| 久热精品视频在线免费观看| 日韩和的一区二区| 黄色网址视频在线观看| 国产精品一区av| 欧美激情一区在线观看| gay欧美网站| 老汉色影院首页| 亚洲欧洲综合另类| jizz久久精品永久免费| 亚洲人成人77777线观看| 国产视频精品久久久| 久久国产三级精品| 日韩电影毛片| 97欧洲一区二区精品免费| 麻豆免费看一区二区三区| 欧美国产亚洲一区| 日本韩国欧美三级| 黄色av成人| 最新97超碰在线| 亚洲国产日韩综合一区| 亚洲国产精品va| 国模一区二区三区白浆| 国产精品igao| 在线播放日韩欧美| 激情综合亚洲| 快射av在线播放一区| 国产精品日韩欧美大师| 亚洲一区二区三区四区五区中文 | 亚洲福利专区| 手机看片一级片| 国产在线观看91精品一区| 日本乱人伦一区| 国产又黄又大久久| 久久丁香四色| 嫩草影院网站在线| 91成人免费看| 久久影院中文字幕| 噜噜噜在线观看免费视频日韩 | 18视频在线观看| 免费日韩在线观看| 国产精品91久久久久久| 在线精品视频免费播放| 国产麻豆成人传媒免费观看| 牛牛影视一区二区三区免费看| 欧美新色视频| 污污的网站18| 久久精品日产第一区二区三区精品版| 亚洲欧美激情四射在线日| 中文字幕日本不卡| 国产成人在线色| 很黄很黄激情成人| caoporn视频在线| 成人网址大全| 人妻少妇精品无码专区二区| 亚洲人成自拍网站| 欧美日韩综合在线| 一区二区三区四区在线播放 | 欧美日韩中字一区| 美日韩一区二区| 在线成人欧美| 日韩理论电影中文字幕| 国产精品videossex撒尿| 最新在线你懂的| 四虎免费在线观看视频| 91精品91久久久久久| 久久亚洲精品小早川怜子66| 亚洲美女中文字幕| 欧美丝袜自拍制服另类| 成人动漫中文字幕| 精品美女视频| 99久久精品一区二区成人| 国产在线看片| 日本成人免费网站| 欧美久久久久免费| 欧美性猛交xxxx富婆| 亚洲欧美日韩小说| 国产精品伦一区二区三级视频| 久久久久久久综合色一本| 国产精品久久午夜| 亚洲卡通欧美制服中文| 亚洲欧美自拍偷拍色图| 亚洲一区在线观看视频| 亚洲午夜久久久| 欧美午夜宅男影院在线观看| 欧美日韩精品在线播放| 欧美一二三四在线| 在线观看中文字幕亚洲| 91精品国产91久久久久久最新| 成人av免费电影| 亚洲熟妇无码一区二区三区导航| 国产网站观看9久| 91九色丨porny丨国产jk| 奇门遁甲1982国语版免费观看高清 | 国产91精品视频在线观看| 亚洲精品在线看| 国产91免费观看| 免费在线观看毛片网站| 一本久道中文无码字幕av| 老司机午夜激情| av影片在线| 福利视频一区| 波多视频一区| 亚洲男男gay视频| 给我免费播放片在线观看| 中文字幕久精品免| 狠狠色狠狠色综合人人| 椎名由奈jux491在线播放| 成人av资源网| 亚洲性无码av在线| 色综合久久久久网| 一区二区三区精品在线| 国产精品视频九色porn| 久久综合九九| 一区二区三区四区在线播放 |