【问题标题】:Does lambda in List.ForEach leads to memory leaks and performance problems?List.ForEach 中的 lambda 是否会导致内存泄漏和性能问题?
【发布时间】:2010-05-12 11:54:24
【问题描述】:

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

sortedElements.ForEach((XElement el) => PrintXElementName(el,i++));

这意味着我在 ForEach 中有一个 lambda,它允许使用像 int i 这样的参数。

我喜欢这样做的方式,但我在某处读到匿名方法和使用 lambda 的委托会导致大量内存泄漏,因为每次执行 lambda 时都会实例化某些东西但没有释放。类似的东西。

您能否告诉我在这种情况下这是否属实,如果是为什么?

【问题讨论】:

标签: c# list lambda foreach


【解决方案1】:

我喜欢这种方式,但我 在某处阅读匿名方法 和代表与 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++);
}

【讨论】:

  • 不应该是return PrintXElementName(el,i++);
  • ForEach 不返回任何内容。它遍历集合中的每个元素。
【解决方案2】:

在您分析您的应用程序并且它确实泄漏内存之前,不必担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多