【问题标题】:Does it help to use NGEN?使用 NGEN 有帮助吗?
【发布时间】:2010-09-28 00:03:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net jit ngen


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            我今晚正在研究这个并遇到以下情况:

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

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

            【讨论】:

            【解决方案6】:

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

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

            (就可用性而言,拥有多台服务器以便您可以滚动重启将比使用 NGEN 网络应用程序的单台服务器为您带来更多好处。)

            【讨论】:

            • 在沿着 NGEN 路线走之前,最好先看看是否可以减少正在加载的装配参考的数量 - 然后沿着 NGEN 路线走。
            • ASP.NET 真的使用 NGen 程序集吗?
            • 您能否详细介绍一下 Performance Manager 图表?如果我用谷歌搜索它,我会递归到这篇文章:(
            • @ChristianGollhardt:我远非专家,但如果您打开 Performance Manager,您可以为各种事物添加图表。
            • @DaveBlack:嗯,除此之外,那篇文章写于 2002 年。那是在 C# 1.0 时代。从那以后发生了很大的变化。 (自从我写了这个答案以来,发生了很大的变化。它已经有将近 10 年的历史了。)NGen 仍然完全有可能对常规 ASP.NET 没有帮助 - 但我对“你应该检查 JIT 时间是否均匀​​”的警告重要”仍然相关。
            猜你喜欢
            • 2011-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-18
            相关资源
            最近更新 更多