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

我问的唯一原因是因为 杰弗里·里克特的这篇文章 2002年说:

而且,当然,Microsoft正在努力改善CLR及其JIT编译器,以使其运行速度更快,生成更优化的代码并更有效地使用内存。这些改进将需要时间。对于迫不及待的开发人员,.NET Framework重新分配可包括一个名为ngen.exe的实用程序。

有帮助吗?

解决方案

NGEN只会有助于启动时间 - 它不会使代码执行任何比它JITting后快。事实上,我相信有一些优化其NGEN的的做,但JIT一样。

所以,主要的问题是:你有启动时间的问题吗?我不知道怎么的ASP.NET应用程序的启动时间多少将是JITting VS其他费用,顺便说一句...你应该看看性能管理器图形的JIT来告诉你,这得花多少时间真正成本你

(在可用性方面,具有多个服务器,以便可以将要给你比使用NGENed web应用程序的单个服务器更益处做滚动重新启动。)

其他提示

NGEN是不是要走了ASP.NET的方式 - 在bin文件夹中的.dll的创作是不是最后一步 - 它们与应用到Web / maching.config设置重新编译你的C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files文件夹。相反NGEN的,以减小初始加载时,使用发布网站工具或aspnet_compiler.exe

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

该讨论与另一个问题密切相关,即如何 JIT 的机器代码被缓存 并重新使用?

我一直在寻找到今晚和整个以下就来了:

公共语言运行时无法加载您使用NGEN创建到共享应用程序域的图像。因为ASP.NET标准组件是共用的,然后加载到一个共享的应用程序域,您不能使用Ngen.exe将它们安装到本地计算机上的本地图像缓存。 http://support.microsoft.com/kb/331979

不知道这只是指从ASP.net应用或该应用本身引用的程序?

是这样做,此YouTube视频演示了它实际上的视频NGEN.exe性能调整

但是注意核对字,检查,然后执行它。

NGEN有助于启动时间。例如,实体框架文档说,这大约运行NGEN的好处:

  

经验观察表明EF运行时组件的本机映像可以的应用程序的启动时间1和3秒之间切断。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top