Performance LINQ堆栈大小问题

Performance LINQ堆栈大小问题,performance,linq,delegates,Performance,Linq,Delegates,我有一个问题,在我的公司里,我们使用毒性报告来测量静态代码,使用reflector code metric作为毒性报告工具的输入,显然我可以看到代码的反汇编程序。我正在使用LINQ对对象和XML进行转换,以使代码更清晰,但我开始面临一些堆栈大小问题。我看到了反汇编的代码,我开始看到,在我包含“where”linq子句的地方,它生成了一个委托,还创建了一个方法,明显地增加了我的堆栈大小,因为它创建了更多的方法。有人知道我怎样才能摆脱这些代表吗?下面是一个例子: 源代码: List<XElem

我有一个问题,在我的公司里,我们使用毒性报告来测量静态代码,使用reflector code metric作为毒性报告工具的输入,显然我可以看到代码的反汇编程序。我正在使用LINQ对对象和XML进行转换,以使代码更清晰,但我开始面临一些堆栈大小问题。我看到了反汇编的代码,我开始看到,在我包含“where”linq子句的地方,它生成了一个委托,还创建了一个方法,明显地增加了我的堆栈大小,因为它创建了更多的方法。有人知道我怎样才能摆脱这些代表吗?下面是一个例子:

源代码:

List<XElement> toolPnP = 
(from c in xPnpInfo.Descendants("assignedSupport")
 where c != null
 select c).ToList();
列表工具pnp=
(来自xPnpInfo.substands(“assignedSupport”)中的c)
其中c!=null
选择c.ToList();
反汇编代码:

List<XElement> toolPnP = xPnpInfo.Descendants((XName) ("assignedSupport")).Where<XElement>(delegate (XElement c) {
 return (c != null);
 }).ToList<XElement>();
List toolPnP=xPnpInfo.substands((XName)(“assignedSupport”))。其中(委托(XElement c){
返回值(c!=null);
}).ToList();
这些代理指向:

[CompilerGenerated]
private static bool <.ctor>b__2(XElement c)
{
    return (c != null);
}
[编译生成]
专用静态布尔布尔图2(XElement c)
{
返回值(c!=null);
}

我怎样才能摆脱这个问题,任何建议都是非常受欢迎的。

除了简单的刺耳回答(后代属性不会给你空结果,所以你不需要测试),不。。。如果没有方法调用,就不能使用linq的where

编译器将where转换为调用
System.Linq.Enumerable.where
,该调用需要方法引用。如果您不喜欢编译器生成的方法,您可以自己编写该方法,但是如果您使用where,则必须有一个方法

Func<XElement, bool> myFunc = this.FilterMethod;
List<XElement> result = xPnpInfo.Descendants("assignedSupport")
  .Where(myFunc)
  .ToList();

您有什么“堆栈大小”问题?这是真实的还是想象的?这似乎是过早的优化。Linq完全基于使用委托,我认为除了使用常规for循环之外,你不会摆脱它。是的,这是真实的,堆栈大小问题是,由于方法(编译器生成)的创建,堆栈大小正在增加。就像rossisdead提到的那样,Linq是基于委托的,委托使用方法,所以我可以创建它们,或者让编译器生成方法。在任何情况下,方法的创建都会增加类的堆栈大小。
public bool FilterMethod(XElement source)
{
  return source != null;
}