首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGen和泛型集合。如何摆脱Jitting?

NGen和泛型集合。如何摆脱Jitting?
EN

Stack Overflow用户
提问于 2013-05-20 18:31:46
回答 1查看 357关注 0票数 1

我正在努力处理ngen和泛型集合。我已经在解决方案中生成了我的所有程序集,但每次我的应用程序执行该代码时,仍然会发生but:

代码语言:javascript
复制
private Dictionary<int, bool> VerifyedFunc; 

public SecurityProvider()
{
    ...
    VerifyedFunc = new Dictionary<int, bool>();
    ...       
}

MDA消息:

代码语言:javascript
复制
Managed Debugging Assistant 'JitCompilationStart' has detected a problem in '*.exe'.
Additional Information: 
<mda:msg xmlns:mda="http://schemas.microsoft.com/CLR/2004/10/mda">
<mda:jitCompilationStartMsg break="true">
<method name="mscorlib!System.Collections.Generic.Dictionary`2::.ctor"/>
</mda:jitCompilationStartMsg>
</mda:msg>

NGen和泛型集合有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-20 19:54:02

好吧,这不是问题。您通过使用jitCompilationStartMsg调试助手解决了这个问题。这只是简单地报告抖动已经开始。我们在您之前关于MDA的问题中讨论了这一点。

这是完全正常的,也是泛型在.NET中的工作方式,jitter在运行时从泛型类定义中生成具体的类。任何引用类型都有一个具体类的实例,代码中使用的每个值类型都有一个实例。

当然,这与Ngen不是很兼容,Dictionary<>是mscorlib.dll中的一个类,当您在机器上安装.NET时,该程序集已生成。Ngen无法预先猜测您将在代码中实例化哪些具体的类类型。在mscorlib.dll中有一个对策,它预定义了许多泛型类型,因此它们将被生成。像List<int>一样,很可能在应用程序中使用。以及.NET框架本身。

您可以从Reference Source, CommonlyUsedGenericInstantiations() method中看到这些预声明的泛型类型。注意,它在该方法中有几个预煮好的Dictionary<>版本。但not a Dictionary<int, bool>太不寻常了。因此,需要使用抖动来为您创建类型。

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

https://stackoverflow.com/questions/16647568

复制
相关文章

相似问题

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