新聞中心
C# NGWS runtime即時編譯器

創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)色尼,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
由C#或其它能產(chǎn)生受管代碼的編譯器所生成的受管代碼就是IL碼。雖然IL代碼被包裝在一個有效的PE文件中,但是你還是不能執(zhí)行它,除非它被轉(zhuǎn)換成為受管原始代碼。這就是C# NGWS runtime即時編譯器大顯身手的時候。
為什么你會對即時編譯代碼感到厭繁,為什么不把整個IL PE文件編譯成原始代碼? 答案是時間——需要把IL代碼編譯成CPU規(guī)格的代碼的時間。這種編譯將更加有效率,因?yàn)橐恍┏绦蚨螐膩砭蜎]有被執(zhí)行過。例如,在我的字處理器中,郵件合并功能從來就沒有被編譯。
從技術(shù)上說,全部的處理過程如下:當(dāng)一個類型被裝載時,裝載器創(chuàng)建一個存根(stub),并使它連接每一個類型的方法。當(dāng)一個方法第一次被調(diào)用時,存根把控制交給JIT.JIT把IL編譯為原始代碼,且把存根指針指向緩沖了的原始代碼。
接著的調(diào)用將執(zhí)行原始碼。在某些位置上(At some point),所有的IL都被轉(zhuǎn)換成為原始代碼,而JITter處于空閑狀態(tài)。
正如我在前面提到的,JIT編譯器有很多,不止一個。在Windows平臺上,NGWS runtime裝有3個不同的JIT編譯器。JIT——這是NGWS runtime默認(rèn)使用的JIT編譯器。它是一個后臺(back end)優(yōu)化的編譯器 ,在前臺(up front)實(shí)行數(shù)據(jù)流分析,并創(chuàng)建了高度優(yōu)化的受管原始代碼做為輸出結(jié)果。JIT可以使用不嚴(yán)格的IL指令集編碼,但是所需資源將十分可觀。主要的限制在于內(nèi)存足跡(footprint)、結(jié)果工作集,以及實(shí)行優(yōu)化所消耗的時間。
EconoJIT—— 和主JIT相比,EconJIT的目標(biāo)是把IL高速地轉(zhuǎn)換成受管原始代碼。它允許緩沖所產(chǎn)生的原始代碼,但是輸出碼并不象主JIT生成的代碼那樣優(yōu)化(代碼小)。當(dāng)內(nèi)存緊張時,快速代碼生成方案的優(yōu)勢將蕩然無存。通過永久地拋棄無用的已JIT過的代碼,你可以把更大的IL程序裝入代碼緩沖區(qū)。因?yàn)镴IT編譯快,執(zhí)行速度也仍然很快。
PreJIT-盡管它是基于主JIT的,但操作起來更象是一個傳 統(tǒng)的編譯器。你安裝了NGWS組件,它才能運(yùn)行,才可以把IL代碼編譯成受管原始代碼。當(dāng)然最終的結(jié)果為,更快的裝載時間和更快的應(yīng)用程序啟動時間(不需要更多的JIT編譯)。
在所列出的即時編譯器中,有兩個是運(yùn)行時的即時編譯器.可是你怎么決定要使用哪一個JIT,它如何使用內(nèi)存?有一個稱做"JIT編譯管理器"的小應(yīng)用程序(jitman.exe),它存放于NGWS SDK安裝目錄下的bin目錄中。當(dāng)執(zhí)行該程序時,它把一個圖標(biāo)加到系統(tǒng)任務(wù)條上,雙擊該圖標(biāo)打開程序?qū)υ捒颉?/p>
盡管它是一個小小的對話框,可是你所選擇的選項功能是相當(dāng)強(qiáng)大的。每一個選項將在以下描述。Use EconoJIT only 選項——當(dāng)該復(fù)選框沒有選上時,NGWS runtime使用默認(rèn)的正常的JIT編譯器。前面就曾經(jīng)解釋過兩種JITter的區(qū)別。
Max Code Pitch Overhead(%)選項——該設(shè)置僅保留給EconoJIT.它控制了JIT編譯時間和執(zhí)行代碼時間的百分比。如果超過了設(shè)定的域值,代碼緩沖區(qū)得到擴(kuò)充,以縮短JIT編譯所消耗的時間。
Limit Size of Code Cache選項——該項默認(rèn)為非選。沒有選擇該項意味著緩沖區(qū)將使用它所能得到的內(nèi)存。如果你想限制緩沖區(qū)大小,復(fù)選該選項,這將允許你使用Max Size of Cache(bytes)選項。
Max Size of Cache(bytes)選項-控制容納JIT代碼的緩沖區(qū)的最大值。雖然你可以非常嚴(yán)格地限制這個值,但你還是應(yīng)該小心,不能超過這個緩沖區(qū)所適合的最大值。否則該方法的JIT編譯將會失敗。
Optimize For Size選項——告訴JIT 編譯器,優(yōu)化的目的是為了使代碼更小而不是能執(zhí)行得更快。這個設(shè)置默認(rèn)是關(guān)掉的。
Enable Concurrent GC[garbage collection]選項——垃圾收集(GC)默認(rèn)地運(yùn)行在用戶代碼的線程中。意味GC發(fā)生時,可能會注意到回應(yīng)有輕微的延遲。為防止出現(xiàn)該現(xiàn)象,打開當(dāng)前GC.注意,當(dāng)前GC 比標(biāo)準(zhǔn)GC更慢,它僅在windows 2000上寫時(the time of writing)有效。
當(dāng)用C#創(chuàng)建項目時,你可能使用不同的設(shè)置試驗(yàn)過。當(dāng)創(chuàng)建 UI-intensive應(yīng)用程序時,你將會看到允許當(dāng)前GC的最大差別。以上介紹C# NGWS runtime即時編譯器。
當(dāng)前標(biāo)題:C#NGWSruntime即時編譯器
分享路徑:http://www.dlmjj.cn/article/dhdcgji.html


咨詢
建站咨詢
