我正在编写在 WindowsCE 6.0 上的 .NETCF 3.5 上运行的 C# 代码,该代码在运行时抛出 Func`2<> 的 MissingMethodExceptions。发生异常的代码部分是随机的。
奇怪的是,当您已经使用该应用程序一段时间并且肯定已经发生了许多对 Func`2 的调用时,就会发生这种情况。 (例如,通过 IEnumerable.Select() 或 .Where()) 如果您在应用程序的生命周期内加载足够的类型,使得程序集文件大小的总和超过约 18MB,则似乎会开始此行为。但设备上有足够的内存 (RAM) 来加载类型。
也激活了LoaderLogging,但没有效果。它只向我显示 Func`2 的 TypeLoad 错误。
当我没有想法时: 造成此类错误的原因是什么?
不幸的是,我无法共享任何代码,因为它是 1) 我工作的公司的属性(property),2) 数万行代码。
最佳答案
.NETCF 似乎有限制:
每个泛型类型声明只能构造 1024 个唯一的封闭类型。(有关详细信息,请参阅“限制”部分: http://blogs.msdn.com/b/romanbat/archive/2005/01/06/348114.aspx )
含义:
List<int> a;
List<int> b;
List<int> c;
占用一个“槽”,
List<int> d;
List<string> e;
占用两个“槽位”(两个独特的结尾),依此类推。
棘手的事情是:通常这会引发 ArgumentException,但有时 .NETCF 会抛出 MissingMethodExceptions。 (参见“3.抛出异常的差异。”:http://blogs.msdn.com/b/nazimms/archive/2005/01/25/360324.aspx)
我们通过尽可能使用我们自己的委托(delegate)类型来减少 Func`2 的使用,这解决了问题。
关于c# - 尽管已经执行了依赖于 Func`2 的代码,但 WinCE 上的 Func`2<> 出现 MissingMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147994/