2017-06-01 61 views
0

为什么CLR需要JIT编译器编译IL机器代码时,它有NGEN,这是在安装时工作。为什么JIT如果我们有NGEN

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

回答

3
  • 因为很多应用程序没有被“安装”,并且没有使用NGEN需要的结构;它们只是文件的存储设备上(或纯粹在存储器中,如果从外部源加载)
  • 因为NGEN是依赖于硬件和硬件可以变化一台机器的寿命
  • 期间因为JIT本身可以是因为应用程序使用诸如插件和扩展点之类的东西;因此,因为许多应用程序使用元编程在运行时为其自身发出优化代码(基于确切条件(它可能是外部数据,直到它在运行时实际调用时才会知道),但是所有内容都可能不可用奥姆斯地图数据库列的对象,例如)
  • ,因为在很多情况下,它是不值得NGEN的开销 - 它不会改善的事情

当NGEN或AOT是一个不错的选择:很好,去做那个。但它不是解决所有问题的魔杖。

还有一个问题,如果JIT已经NGENed了,怎么会编译IL代码呢?

假设NGEN图像的所有先决条件都是完美匹配的,那么JIT就不需要涉及。

1

This post有一些解释为什么NGEN可能不如听起来那么有吸引力。

here有很多老建议微软何时使用NGEN

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

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

相关问题