0
我有一个问题,在我的公司,我们使用毒性报告来测量使用反射器代码度量作为毒性报告工具的输入的静态代码,显然我可以看到反汇编代码。我使用LINQ to Objects和XML来清除我的代码,但是我开始面临一些堆栈大小问题。我看到了反汇编的代码,并且我开始看到包含“where”linq子句的地方,它生成了一个委托并创建了一个方法,显然增加了我的堆栈大小,因为创建了更多的方法。有谁知道我该如何摆脱代表?这里有一个例子:LINQ堆栈大小问题
的源代码:
List<XElement> toolPnP =
(from c in xPnpInfo.Descendants("assignedSupport")
where c != null
select c).ToList();
拆卸代码:
List<XElement> toolPnP = xPnpInfo.Descendants((XName) ("assignedSupport")).Where<XElement>(delegate (XElement c) {
return (c != null);
}).ToList<XElement>();
这些委托指向:
[CompilerGenerated]
private static bool <.ctor>b__2(XElement c)
{
return (c != null);
}
我怎样才能摆脱的是,任何建议都会受到欢迎。
什么 “堆栈大小” 的问题你有没有和这是真实的还是想象? – BrokenGlass 2012-03-29 22:55:26
这似乎是不成熟的优化。 Linq完全基于使用代表,我不认为你会在使用常规循环之外摆脱这种情况。 – rossisdead 2012-03-29 22:56:25
这是真的,堆栈大小的问题是堆栈大小增加,因为创建方法(编译器生成)。看起来像rossisdead提到Linq是基于委托和委托使用方法的,所以我可以创建它们或者让编译器生成方法,无论如何创建的方法都会增加类的堆栈大小。 – 2012-10-02 13:24:50