首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

GAC与JIT
EN

Stack Overflow用户
提问于 2009-03-17 21:37:40
回答 4查看 1.6K关注 0票数 5

GAC下的一切都是预编译(ngened)的吗?如果是这样,那么所有的.NET都是预编译的,所以CLR不可能在运行时对它们进行优化?

比如,如果你在应用程序中使用List,那么CLR将无法优化列表本身,而只能优化它在应用程序中的使用方式?这不是违背了JIT在运行时获得大量优化的目的吗?因此,实际上失去了对BCL的所有潜在优化?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-17 21:40:11

不,GAC不会自动进行预JIT;但是,GAC是预JIT的先决条件。实际上,只有一小部分东西是预JIT的。此外,如果BCL是预JIT的,那么这些优化已经由NGEN 完成了,所以“失去所有潜在的优化”是不成问题的。

票数 4
EN

Stack Overflow用户

发布于 2009-03-17 22:54:16

GAC可以包含非ngen的代码(在使用ngen时,它必须包含ngen以及本机映像,因为ngen的映像不包含所有需要的元数据)。Ngen'd代码要求dll安装在GAC中才能有效地工作(从技术上讲,您可以在没有安装的情况下执行此操作,但生成的名称验证无论如何都会触发对dll的完全读取,这可能会使您的启动时间变得更糟)。

在3.5NGEN之前,sp1的编译与运行时有一些细微的不同,更多细节见this article。我想这对于3.5SP1仍然适用,因为这些问题很难解决。

由于ngen实际上只为您带来了两大成功,因此您应该考虑其中之一/两者在您的场景中是否都很重要,以证明与使用它们相关的复杂性和成本。

  1. 这些dll的启动时间大大缩短了,尽管所有在启动时加载的dll都需要修改以避免加载jit itself)

的开销,但

  • 确实是一个很大的胜利。

  1. 本机映像可以跨多个进程共享内存空间。如果你只运行一两个进程,
    • 是毫无意义的。

我建议This article detailing some of the changes in the 2.0 ngen是一个很好的读物,它涵盖了像硬绑定这样的东西,这是一个很大的改进,并提供了关于编写高效托管代码的优秀通用文档的链接,尽管它受到了链接损坏的影响,请参阅它所指的msdn Chapter 5。(请注意,该文档是旧的,但许多主题仍然有效)

票数 2
EN

Stack Overflow用户

发布于 2009-03-17 21:41:08

否,全局程序集缓存未预编译。

较新版本的框架确实有一个在后台运行的优化服务,该服务执行一些预编译。但是,当它在目标系统上运行时,它所做的所有预编译都针对该特定系统进行了优化。

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

https://stackoverflow.com/questions/656140

复制
相关文章

相似问题

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