【问题标题】:Why JIT if we have NGEN如果我们有 NGEN,为什么要 JIT
【发布时间】:2017-11-02 08:33:20
【问题描述】:

为什么CLR 需要JIT 编译器将IL 编译为机器代码,而NGEN 可以在安装时执行此操作。

还有一个问题,JIT 将如何编译 IL 代码,如果它已经被 NGENed 了?

【问题讨论】:

    标签: .net clr jit ngen


    【解决方案1】:
    • 因为从这个意义上说,许多应用程序没有“安装”,并且没有使用 NGEN 所需的结构;它们只是存储设备上的文件(或者纯粹在内存中,如果从外部源加载)
    • 因为 NGEN 与硬件相关联,而硬件可以在机器的生命周期中更改
    • 因为 JIT 本身可以单独更新到您的应用程序,修复错误并提高性能
    • 因为应用程序使用插件和扩展点之类的东西;当你 NGEN 时,一切都可能不可用
    • 因为许多应用程序使用元编程在运行时为自己发出优化代码基于确切的条件(这可能是外部数据在运行时实际调用之前不可知 - ORM 如何映射数据库列到对象,例如)
    • 因为在许多情况下它不值得 NGEN 的开销 - 它不会改善事情

    当 NGEN 或 AOT 非常适合时:很好,去做吧。但它并不是能解决所有问题的魔杖。

    还有一个问题,如果 IL 代码已经 NGENed,JIT 将如何编译它?

    假设满足 NGEN 图像完美匹配的所有前提条件,则不需要涉及 JIT。

    【讨论】:

      【解决方案2】:

      This post 解释了为什么NGEN 可能不像听起来那么吸引人。

      还有hereMicrosoft 有非常古老的建议,何时使用NGEN

      还有一个问题,如果JIT 已经是 NGENed,它将如何编译 IL 代码?

      如果运行时决定需要重新编译 - 它将完全忽略 NGENed 图像。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        • 2022-11-24
        相关资源
        最近更新 更多