【问题标题】:JIT vs NGen - what is the difference?JIT 与 NGen - 有什么区别?
【发布时间】:2011-07-28 08:38:46
【问题描述】:

因此,当 CLR 运行时加载 .NET 程序集时,它会将其编译为机器本机代码。这个过程称为 JITing。 NGen 也是将 .NET 程序集编译为本机代码的过程。我不明白两者有什么区别?

【问题讨论】:

    标签: .net clr jit ngen


    【解决方案1】:

    区别在于它们发生的时间。 JIT 编译发生在您的程序运行时。 NGen 通常在程序安装时完成,并且发生在程序运行之前。 NGen 的目标之一是消除应用程序启动时的 JIT 损失。

    【讨论】:

    • 当我们拥有 NGEN 时,JIT 到底需要什么?
    • @Imad 可移植性。使用 NGen,您必须为目标系统预编译代码。使用 JIT,它将在执行期间“即时”编译(或完成编译),这意味着您可以简单地分发可执行文件,它可以在任何 .NET 运行的地方运行。
    【解决方案2】:

    JIT 仅按方法完成;它不会 JIT 一切...只有您需要的位。当然,这对第一次方法(加上泛型等)有一个小但可测量的影响。 NGEN 预先完成这项工作,但必须在相同的平台/架构等上完成 - 本质上是那台机器。这也意味着将其添加到 GAC 等,这可能需要更高的访问权限。

    在许多情况下,JIT 很好,特别是如果应用程序长时间打开(例如 Web 服务器)。

    【讨论】:

      【解决方案3】:

      尚未提及的一个非常重要的区别是本机缓存图像具有“共享代码页”,这对在终端服务或 Citrix 上运行的应用程序的内存占用产生了巨大的影响。

      了解 NGEN 的关键在于,它在编译您的代码的同时,还将代码页标记为可共享,以便您的应用程序的多个实例可以共享第一个实例使用的部分内存空间。如果您在终端服务下运行,这将非常有用。

      http://blogs.msdn.com/b/morgan/archive/2009/03/07/developing-net-applications-for-deployment-on-terminal-services-or-citrix.aspx.

      这对于由多个用户在单台机器上使用的应用程序具有非常重要的意义,因为它们在进程之间共享内存。如果图像缓存没有得到很好的维护,这可能会导致非常奇怪、难以重现的行为和资源管理问题。

      【讨论】:

      • 如果您在同一台机器上运行 >100 个相同工作程序的实例,这也是相关的(由于更好的隔离/稳定性,进程优先于线程)。
      • 内存共享也适用于网络花园,其中同一个站点在不同的 W3WP.exe 进程中多次加载。 JIT 仍然不允许内存共享吗?
      • 真的,这个好处适用于每当你有很多进程在同一台机器上使用相同的库版本在同一个 CLR 上加载相同的二进制文件(可执行或不可执行),不管你为什么拥有它们。
      【解决方案4】:

      来自 MSDN...

      本机映像生成器 (Ngen.exe) 是一种提高托管应用程序性能的工具。 Ngen.exe 创建本机映像,这些文件包含已编译的特定于处理器的机器代码,并将它们安装到本地计算机上的本机映像缓存中。运行时可以使用缓存中的本机图像,而不是使用即时 (JIT) 编译器来编译原始程序集。

      http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=VS.100).aspx

      基本上,NGen 允许您在本地机器上进行预 JIT 和缓存程序集。这可以加快启动速度,有时还可以加快执行速度。

      【讨论】:

        【解决方案5】:

        这里省略了很多细节,但是:

        Jit 不完全是……Jit 是即时的,这意味着它不会被编译为本机代码,直到代码(例如方法)被实际调用。在那之前只有存根。这将保持缓存,以便对该方法的后续调用不会重新生成本机代码。

        NGen 一次完成整个组装。 NGen 一次完成所有操作,因此不需要 Jitting。

        【讨论】:

          猜你喜欢
          • 2017-11-02
          • 1970-01-01
          • 2018-05-13
          • 2015-02-10
          • 2018-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多