2

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

如果我尝试在此解决方案文件中对核心程序集进行 NGEN,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中创建问题。

4

1 回答 1

2

后来发现原因是我对Tuple<...>泛型类的实现。

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

  1. 适用于所有参考类型的通用版本
  2. 每种值类型都有一个版本

由于我有多达 16 个通用参数的元组版本,为了更好地衡量,NGEN 忙于Tuple<T1, T2, T3, T4, ..., T16>为所有值类型生成每个组合。

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

于 2010-11-08T08:29:39.727 回答