使用NGEN有帮助吗?

时间:2008-12-22 09:19:22

标签: asp.net jit ngen

当我们知道ASP.NET应用程序不会发生太大变化时,使用它是否更好?或者JIT足够好吗?

我问的唯一原因是因为2002年的this article by Jeffrey Richter说:

  

当然,微软正在努力改进CLR   和它的JIT编译器使它运行得更快,产生更多优化   代码,并更有效地使用内存。这些改进将需要   时间。对于不能等待的开发人员,.NET Framework   redistributable包含一个名为NGen.exe的实用程序。

6 个答案:

答案 0 :(得分:22)

NGen只会帮助启动时间 - 它不会使代码执行得比JITting之后更快。实际上,我相信有一些优化,NGen 不会做但JIT确实做了。

所以,主要的问题是:你有启动时间的问题吗?我不知道ASP.NET应用程序的启动时间有多少是JITting与其他成本,顺便说一下......你应该看看JIT的Performance Manager图表,告诉你它花了多少时间才真正耗费你

(在可用性方面,拥有多台服务器以便您可以进行滚动重启,这将比使用NGENed Web应用程序的单台服务器带来更多好处。)

答案 1 :(得分:8)

NGen不适合使用ASP.NET - 在bin文件夹中创建.dll不是最后一步 - 它们会再次使用web / maching.config设置进行编译C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files文件夹。而不是NGen,以减少初始加载时间,使用发布网站工具或aspnet_compiler.exe

答案 2 :(得分:1)

我不确定NGEN的主要好处是单独启动时间 - 如果应用程序遭受JIT 的高'%时间',这被列为潜在的补救措施: http://msdn.microsoft.com/en-us/library/dd264972(VS.100).aspx

讨论与JIT'd machine code is cached如何重复使用的不同问题密切相关?

答案 3 :(得分:0)

我今晚正在研究这个问题并遇到以下问题:

公共语言运行库无法将使用NGEN创建的图像加载到共享应用程序域中。由于ASP.NET标准程序集是共享的,然后加载到共享应用程序域中,因此无法使用Ngen.exe将它们安装到本地计算机上的本机映像缓存中。 http://support.microsoft.com/kb/331979

不确定这只是引用从ASP.net应用程序或应用程序本身引用的程序集吗?

答案 4 :(得分:0)

是的,这个youtube视频实际上展示了它Video of NGEN.exe performance tuning

但请注意检查,检查并实施它。

答案 5 :(得分:0)

NGen帮助启动时间。例如,Entity Framework documentation说明了运行NGen的好处:

  

经验观察显示EF运行时程序集的本机映像可以缩短应用程序启动时间的1到3秒。

上下文只是实体框架程序集。 NGenning其他组件将提供额外的加速。