使用.net 2003中的ngen.exe编译.net程序

来源:百度文库 编辑:神马文学网 时间:2024/04/28 02:31:30
使用.net 2003中的ngen.exe编译.net程序 收藏
ngen.exe程序为.net 2003自带,
在:\windows\microsoft.net\framework\v1.1.4322目录下ngen.exe
ngen能把.net框架的东西编译成机器码....
网友:Visual Studio .NET 2003程序的运行速度怎么样,我有一个感觉,Visual Studio .NET 2002的程序运行的速度要比VS6要慢,所以担心运行速度要比Visual Studio .NET 2002要慢,会有这种问题吗?
曹严明:Visual Studio .NET 2002和Visual Studio .NET 2003开发的程序,都需要运行在.NET的Framework之上,你如果编译出中间代码,然后再运行的话,你感觉到跟原来的VS6.0肯定要慢一些。如果你把它编译成本地代码,我们有一个ngen工具,可以把它编译成机器代码,那样的话就没有任何区别了。
发言人:Jan Gray
Microsoft CLR Performance Team
观点:我还应该提一下 NGEN,这是一种“超前的”工具,可以将 CIL 编译为本机代码程序集。尽管利用 NGEN 编译程序集在当前并不会对执行时间造成什么实质性的影响(好的或坏的影响),却会使加载到许多应用程序域和进程中的共享程序集的总工作集减少。(操作系统可以跨所有客户端共享一份利用 NGEN 编译的代码,而实时编译的代码目前通常不会跨应用程序域或进程共享。
出处:http://www.csdn.net/develop/article/18/18547.shtm
作者:命令行环境学习C#指南    visitant(原作)
观点: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 : 由于时间和具体技术问题的关系,可能有些问题我们不能马上回答您,请您谅解。另外,不能回答的问题,请张贴到我们的新闻组(msnews.microsoft.com)
[Q] 请问,是否可以直接将C#或VB.NET编译成本地代码?如果可以,怎么做?
[A] 使用NGEN.EXE可以做到,但是编译之后的native代码仍然需要CLR的支援才能运行,而性能会受到影响。
[Q] 如果使用了NGEN生成后还是要CLR支援,那么NGEN有什么用呢?
[A] NGEN可以较少程序的启动WorkSet,具体说,程序启动速度会比较快,这在UI程序里是很重要的。
[Q] 既然是“本地代码=",为何仍要CLR的支持?能不能简单说一下NGEN的简单用法?
[A] 本地代码只是你的Assembly的编译版本,诸如类库仍然需要的,而且如果程序用到其他Assembly的话仍然需要JIT编译。
[Q] JIT里有几个选项(Normal,Pre-JIT,Zapped),其实是在哪里设置的?他们分别具体代表什么?
[A] Normal JIT应该是指普通的Assembly,Pre-JIT应该是指NGEN生成的native影像。
出处:http://www.zdnet.com.cn/developer/study/story/0,2000081626,39032784,00.htm
发言人:Jim Miller,公共语言运行时首席项目经理
观点
:缺省情况下,在.NET框架上运行的代码都是即时(JIT)编译的。就是说,在代码运行的时候,假如编译器首次遭遇特定的方法(method),那么某一块代码将从MSIL(微软中介语言)翻译为x86机器指令。所产生的x86指令则会被存储起来供应用程序在执行期间使用。这样,如果应用程序再次调用该方法,处理器就会直接跳到对应的x86指令而无需重新编译 MSIL。一旦大多数方法都被即时编译,则JIT编译还没有被调用的不常用方法的开销几乎可以忽略不计。
在程序开始运行的时候,此时,应用程序大多数或者所有的方法都是首次提交给JIT编译器,应用程序的性能自然会受到一定程度的冲击。为此,我们又为代码提供了可选择的pre-JIT (也称为本机映像生成器:NGEN)。这种技术将在运行时之前把MSIL翻译为x86指令,从而有效地避免了程序启动的延迟现象。简而言之,如果程序的启动时间成为一个问题,那么你不妨考虑对程序代码进行pre-JIT编译。