18

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

我问的唯一原因是因为Jeffrey Richter 在 2002 年的这篇文章说:

而且,当然,微软正在努力改进 CLR 及其 JIT 编译器,以便它运行得更快,生成更优化的代码,并更有效地使用内存。这些改进需要时间。对于迫不及待的开发人员,.NET Framework 可再发行组件包括一个名为 NGen.exe 的实用程序。

4

6 回答 6

22

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

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

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

于 2008-12-22T09:24:14.440 回答
10

NGen 不是用于 ASP.NET 的方法——在 bin 文件夹中创建 .dll 不是最后一步——它们会使用应用到C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files文件夹的 web/maching.config 设置再次编译。要减少初始加载时间,请使用 Publish Website Tool 或 aspnet_compiler.exe 而不是 NGen

于 2009-06-02T05:06:37.707 回答
1

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

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

于 2009-10-21T20:13:22.170 回答
0

今晚我正在调查这个并遇到以下情况:

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

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

于 2009-05-28T21:59:19.563 回答
0

是的,这个 youtube 视频实际演示了 NGEN.exe 性能调整视频

但是要注意检查,检查然后实施。

于 2014-06-12T15:41:03.107 回答
0

NGen 有助于缩短启动时间。例如,Entity Framework 文档说明了运行 NGen 的好处:

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

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

于 2014-08-02T00:10:26.187 回答