使用.net 2003中的ngen.exe編譯.net程序
收藏ngen.exe程序?yàn)?net 2003自帶,
在:\windows\microsoft.net\framework\v1.1.4322目錄下ngen.exe
ngen能把.net框架的東西編譯成機(jī)器碼....
網(wǎng)友:Visual Studio .NET 2003程序的運(yùn)行速度怎么樣,我有一個(gè)感覺(jué),Visual Studio .NET 2002的程序運(yùn)行的速度要比VS6要慢,所以擔(dān)心運(yùn)行速度要比Visual Studio .NET 2002要慢,會(huì)有這種問(wèn)題嗎?
曹嚴(yán)明:Visual Studio .NET 2002和Visual Studio .NET 2003開(kāi)發(fā)的程序,都需要運(yùn)行在.NET的Framework之上,你如果編譯出中間代碼,然后再運(yùn)行的話,你感覺(jué)到跟原來(lái)的VS6.0肯定要慢一些。如果你把它編譯成本地代碼,我們有一個(gè)ngen工具,可以把它編譯成機(jī)器代碼,那樣的話就沒(méi)有任何區(qū)別了。
發(fā)言人:Jan Gray
Microsoft CLR Performance Team
觀點(diǎn):我還應(yīng)該提一下 NGEN,這是一種“超前的”工具,可以將 CIL 編譯為本機(jī)代碼程序集。盡管利用 NGEN 編譯程序集在當(dāng)前并不會(huì)對(duì)執(zhí)行時(shí)間造成什么實(shí)質(zhì)性的影響(好的或壞的影響),卻會(huì)使加載到許多應(yīng)用程序域和進(jìn)程中的共享程序集的總工作集減少。(操作系統(tǒng)可以跨所有客戶端共享一份利用 NGEN 編譯的代碼,而實(shí)時(shí)編譯的代碼目前通常不會(huì)跨應(yīng)用程序域或進(jìn)程共享。
出處:
http://www.csdn.net/develop/article/18/18547.shtm作者:命令行環(huán)境學(xué)習(xí)C#指南 visitant(原作)
觀點(diǎn):Ngen.exe: native image generator
Compiles an assembly to native code and installs a native image in the local assembly cache. That native image is used each time you access the original assembly, even though the original assembly contains MSIL. If the runtime can't locate the native image,it falls back on JIT compilation. Here are some examples:
ngen foo.exe
ngen foo.dll
出處:微軟官方聊天室
Ming_MVP : 今天的聊天主題是:Common Language Runtime
Ming_MVP : 由于時(shí)間和具體技術(shù)問(wèn)題的關(guān)系,可能有些問(wèn)題我們不能馬上回答您,請(qǐng)您諒解。另外,不能回答的問(wèn)題,請(qǐng)張貼到我們的新聞組(msnews.microsoft.com)
[Q] 請(qǐng)問(wèn),是否可以直接將C#或VB.NET編譯成本地代碼?如果可以,怎么做?
[A] 使用NGEN.EXE可以做到,但是編譯之后的native代碼仍然需要CLR的支援才能運(yùn)行,而性能會(huì)受到影響。
[Q] 如果使用了NGEN生成后還是要CLR支援,那么NGEN有什么用呢?
[A] NGEN可以較少程序的啟動(dòng)WorkSet,具體說(shuō),程序啟動(dòng)速度會(huì)比較快,這在UI程序里是很重要的。
[Q] 既然是“本地代碼=",為何仍要CLR的支持?能不能簡(jiǎn)單說(shuō)一下NGEN的簡(jiǎn)單用法?
[A] 本地代碼只是你的Assembly的編譯版本,諸如類庫(kù)仍然需要的,而且如果程序用到其他Assembly的話仍然需要JIT編譯。
[Q] JIT里有幾個(gè)選項(xiàng)(Normal,Pre-JIT,Zapped),其實(shí)是在哪里設(shè)置的?他們分別具體代表什么?
[A] Normal JIT應(yīng)該是指普通的Assembly,Pre-JIT應(yīng)該是指NGEN生成的native影像。
出處:
http://www.zdnet.com.cn/developer/study/story/0,2000081626,39032784,00.htm發(fā)言人:Jim Miller,公共語(yǔ)言運(yùn)行時(shí)首席項(xiàng)目經(jīng)理
觀點(diǎn)
:缺省情況下,在.NET框架上運(yùn)行的代碼都是即時(shí)(JIT)編譯的。就是說(shuō),在代碼運(yùn)行的時(shí)候,假如編譯器首次遭遇特定的方法(method),那么某一塊代碼將從MSIL(微軟中介語(yǔ)言)翻譯為x86機(jī)器指令。所產(chǎn)生的x86指令則會(huì)被存儲(chǔ)起來(lái)供應(yīng)用程序在執(zhí)行期間使用。這樣,如果應(yīng)用程序再次調(diào)用該方法,處理器就會(huì)直接跳到對(duì)應(yīng)的x86指令而無(wú)需重新編譯 MSIL。一旦大多數(shù)方法都被即時(shí)編譯,則JIT編譯還沒(méi)有被調(diào)用的不常用方法的開(kāi)銷幾乎可以忽略不計(jì)。
在程序開(kāi)始運(yùn)行的時(shí)候,此時(shí),應(yīng)用程序大多數(shù)或者所有的方法都是首次提交給JIT編譯器,應(yīng)用程序的性能自然會(huì)受到一定程度的沖擊。為此,我們又為代碼提供了可選擇的pre-JIT (也稱為本機(jī)映像生成器:NGEN)。這種技術(shù)將在運(yùn)行時(shí)之前把MSIL翻譯為x86指令,從而有效地避免了程序啟動(dòng)的延遲現(xiàn)象。簡(jiǎn)而言之,如果程序的啟動(dòng)時(shí)間成為一個(gè)問(wèn)題,那么你不妨考慮對(duì)程序代碼進(jìn)行pre-JIT編譯。