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