首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我们有NGEN为什么

如果我们有NGEN为什么
EN

Stack Overflow用户
提问于 2017-06-01 09:16:14
回答 2查看 202关注 0票数 0

为什么CLR需要JIT编译器来将IL编译成机器代码,而它有在安装时可以完成该功能的NGEN

还有一个问题,如果JIT已经是NGENed,那么它将如何完成IL代码呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-01 09:21:05

  • 因为许多应用程序在这个意义上没有“安装”,并且不使用NGEN所需的结构;它们只是存储设备上的文件(如果从外部源加载的话,它们只是内存中的文件)。
  • 因为NGEN与硬件有关,而硬件在机器使用期间可能会发生变化。
  • 因为JIT本身可以单独更新到您的应用程序中,所以可以修复bug并提高性能。
  • 因为应用程序使用插件和扩展点之类的东西,所以当您使用NGEN时,所有东西都可能无法使用。
  • 因为许多应用程序使用元编程在运行时根据确切的条件(在运行时实际调用外部数据之前可能是不可知的)为自己发出优化的代码,例如ORMs如何将数据库列映射到对象)
  • 因为在很多情况下,它不值得使用NGEN的开销--它不会改善事情。

当NGEN或AOT很合适的时候:太好了,去做吧。但这不是解决所有问题的魔杖。

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

假设NGEN映像是一个完美匹配的所有先决条件都满足了,那么JIT就不需要参与了。

票数 3
EN

Stack Overflow用户

发布于 2017-06-01 09:22:27

这个职位有一些解释,为什么NGEN可能没有听起来那么有吸引力。

还有这里,微软,,在什么时候使用NGEN都有很老的建议。

还有一个问题,如果IL代码已经是JIT,那么它将如何处理IL代码呢?

如果运行时决定重新编译是必需的-它将完全忽略NGENed映像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44303371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档