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可能存在的问题: