ngen.exe如何以及何时起作用?

Dhi*_*ren 19 ngen

我想知道pre-JIT编译(ngen.exe)的好处.Native Image Generator(NGen)过程的作用是什么?为什么需要它?

请举个例子.

m_e*_*ric 31

对于.NET平台上的代码执行,需要将通用中间语言(CIL)表示转换为机器代码.如果在执行之前立即发生这种情况,则称为JIT(即时)编译.JIT的输出不会保留,因此您的托管应用程序必须在每次启动时都通过JIT.

或者,您可以使用预编译来减少与JIT编译相关的启动开销.NGen执行预编译并将本机映像保留在本机映像缓存中.然后,应用程序可以使用本机映像运行,并且由于减少了JIT编译开销,可能会遇到更快的启动时间.最初,NGen是一种安装时技术,开发人员使应用程序安装程序发出NGen命令,以在安装期间触发预编译.有关更多详细信息,请查看http://msdn.microsoft.com/en-us/magazine/cc163808.aspx.本文提供了一个利用NGen的示例应用程序.

在Windows 8(.NET 4.5)中,引入了一种新的NGen模式:"Auto NGen".基本上,.NET运行时为托管应用程序生成使用日志.当系统空闲时,自动维护任务在后台运行并生成本机映像.这样开发人员就不再需要明确地处理NGen了.请注意,此功能仅对面向Window Store或使用GAC的 .NET 4.5+应用程序启用.这是一个可能有用的MSDN页面:http: //msdn.microsoft.com/en-us/library/hh691758(v = vs1010).aspx

这是对NGen和相关技术的高级概述: 需要速度吗?.NET应用程序开始更快

最后,.NET框架库本身使用NGen来获得更好的性能.当.NET框架得到服务时,一些本机映像会失效.然后NGen需要运行以重新生成无效的本机映像.这是通过在空闲时间运行的.NET运行时优化服务自动完成的.

  • 前两个MSDN链路坏了. (4认同)

Shi*_*ala 7

.NET编译流程

当.NET编译器编译C#或VB.NET代码时,它会编译它们并创建CIL代码.当您运行这个半编译的.NET EXE文件时,JIT在后台运行并将半个CIL代码编译为完整的机器语言.此模式称为普通JIT.

您还可以通过运行完整编译的EXE文件来反过来说您不希望运行时编译.此编译通过使用negen.exe完成.在这种情况下,JIT不会在运行时参与.这被称为预JIT模式.

如果您想了解它们如何影响性能,您可以看到此YouTube视频,该视频演示了正常JIT和pre-JIT编译模式:

解释JIT,Ngen.exe,Pre-jit,Normal-Jit和Econo-Jit.(.NET面试问题)