Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# List.ForEach中的lambda是否会导致内存泄漏和性能问题?_C#_List_Lambda_Foreach - Fatal编程技术网

C# List.ForEach中的lambda是否会导致内存泄漏和性能问题?

C# List.ForEach中的lambda是否会导致内存泄漏和性能问题?,c#,list,lambda,foreach,C#,List,Lambda,Foreach,我有一个问题,我可以用这样的方法解决 sortedElements.ForEach((XElement el) => PrintXElementName(el,i++)); 这意味着我在ForEach中有一个lambda,它允许使用像int I这样的参数 我喜欢这样做,但我在某处读到,使用lambda的匿名方法和委托会导致大量内存泄漏,因为每次执行lambda时,都会实例化一些内容,但不会释放。差不多吧 你能告诉我在这种情况下这是真的吗?如果是为什么 我喜欢那样做,但我 读到一些匿名方法

我有一个问题,我可以用这样的方法解决

sortedElements.ForEach((XElement el) => PrintXElementName(el,i++));
这意味着我在ForEach中有一个lambda,它允许使用像int I这样的参数

我喜欢这样做,但我在某处读到,使用lambda的匿名方法和委托会导致大量内存泄漏,因为每次执行lambda时,都会实例化一些内容,但不会释放。差不多吧

你能告诉我在这种情况下这是真的吗?如果是为什么

我喜欢那样做,但我 读到一些匿名方法 带lambda的代表将导致 每次都会有大量内存泄漏 当lambda被执行时,有些东西是 已实例化但未发布

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

这并不是说你不能让一个lamda表达式导致一个巨大的内存泄漏,这就像其他代码一样。如果你要说做点什么

(x => //open unmanaged resource here and not close it....)
foreach
循环中调用,这可能非常糟糕

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

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

void Your_Function (XElement el)
{
    PrintXElementName(el,i++);
}
我喜欢那样做,但我 读到一些匿名方法 带lambda的代表将导致 每次都会有大量内存泄漏 当lambda被执行时,有些东西是 已实例化但未发布

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

这并不是说你不能让一个lamda表达式导致一个巨大的内存泄漏,这就像其他代码一样。如果你要说做点什么

(x => //open unmanaged resource here and not close it....)
foreach
循环中调用,这可能非常糟糕

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

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

void Your_Function (XElement el)
{
    PrintXElementName(el,i++);
}

在您评测应用程序并且它确实泄漏内存之前,不值得担心。

在评测应用程序并且它确实泄漏内存之前,不值得担心。

是否应该
返回PrintXElementName(el,i++)?ForEach不返回任何内容。它循环遍历集合中的每个元素?ForEach不返回任何内容。它循环遍历集合中的每个元素。不是内存泄漏,而是lambda/foreach可能存在的问题:不是内存泄漏,而是lambda/foreach可能存在的问题: