List.ForEach中的lambda会导致内存泄漏和性能问题吗?

Mon*_*hus 0 c# foreach lambda list

我有一个问题,我可以使用这样的东西解决

sortedElements.ForEach((XElement el) => PrintXElementName(el,i++));
Run Code Online (Sandbox Code Playgroud)

这意味着我在ForEach中有一个允许使用int i等参数的lambda.

我喜欢这样做的方式,但我读到某处匿名方法和lambda委托会导致大量内存泄漏,因为每次执行lambda时都会实例化某些内容但不会被释放.这样的事情.

你能告诉我这种情况是否属实,如果是这样的话?

kem*_*002 6

我喜欢这样做的方式,但我读到某处匿名方法和lambda代理会导致大量内存泄漏,因为每次执行lambda时都会实例化某些内容但不会被释放

不,那不是真的.现在,在委托被垃圾收集之前,不会释放使用过的资源.它就像任何其他托管对象一样,但在大多数情况下使用Lambda表达式并不比以另一种方式完成相同的操作效率低.

这并不是说你不能使lamda表达式导致大量内存泄漏,它就像任何其他代码一样.如果你说要做的事情

(x => //open unmanaged resource here and not close it....)
Run Code Online (Sandbox Code Playgroud)

并在foreach循环中调用它,这可能非常糟糕.

你要记住的是你的Lamda表达本质上是

(XElement el) => PrintXElementName(el,i++)

void Your_Function (XElement el)
{
    PrintXElementName(el,i++);
}
Run Code Online (Sandbox Code Playgroud)