任何理由为什么NGEN应该挂起并且永远不会完成特定的组装?

时间:2010-04-15 10:00:18

标签: .net-3.5 assemblies ngen

我有一个使用Visual Studio 2008构建的.NET 3.5类库项目。

如果我尝试在此解决方案文件中验证核心组件,NGEN永远不会完成,或者至少在我不打算让它运行的时候(比如一夜之间)。

还有其他人经历过这个吗?如果是这样,你解决了吗?如果你这样做了,怎么样?你采取了什么措施?

如果这是NGEN中的错误,我该如何将其发布给Microsoft?我有一个连接帐户,但是我在哪里发布这个特定产品的错误报告,而不是.NET类(我知道去哪里)。

有问题的类库可以在这里找到:

有问题的程序集是LVK.Core程序集。

更新:完成了.NET 4.0的NGEN,但这花费了将近15分钟:

time /t
12:44:39
ngen install lvk.core.dll
Microsoft (R) CLR Native Image Generator - Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.
Installing assembly C:\Dev\VS.NET\LVK\LVK.Core\bin\x86\Debug\lvk.core.dll
    Compiling assembly C:\Dev\VS.NET\LVK\LVK.Core\bin\x86\Debug\lvk.core.dll (CLR v2.0.50727) ...
LVK.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=8dbb1dd9b1276c0a <debug>
time /t
12:59:24

更新#2:Microsoft Connect中创建了问题。

1 个答案:

答案 0 :(得分:2)

后来发现这是Tuple<...>泛型类的实现。

事实证明,通过NGEN调用的JIT过程将为以下类型创建每个Tuple<...>类型的NGEN版本:

  1. 所有参考类型的一个常见版本
  2. 每种值类型的一个版本
  3. 由于我有多达16个通用参数的Tuple版本,只是为了很好的衡量,NGEN正在忙着为所有值类型生成Tuple<T1, T2, T3, T4, ..., T16>的每个组合。

    我将类型数量减少到更少的通用参数,NGEN现在完成了。