当我们知道ASP.NET应用程序不会发生太大变化时,使用它是否更好?或者JIT足够好吗?
我问的唯一原因是因为2002年的this article by Jeffrey Richter说:
当然,微软正在努力改进CLR 和它的JIT编译器使它运行得更快,产生更多优化 代码,并更有效地使用内存。这些改进将需要 时间。对于不能等待的开发人员,.NET Framework redistributable包含一个名为NGen.exe的实用程序。
答案 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其他组件将提供额外的加速。