【发布时间】:2010-09-06 10:19:36
【问题描述】:
在 .NET 中,我们可以通过哪些方式获得内存泄漏?
我知道两个:
- 未正确注销Event Handlers/Delegates。
- 不在 Windows 窗体中释放动态子控件:
例子:
// Causes Leaks
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
// Correct Code
Label label = new Label();
this.Controls.Add(label);
this.Controls.Remove(label);
label.Dispose();
更新:这个想法是列出不太明显的常见陷阱(例如上面的)。通常的想法是,由于垃圾收集器,内存泄漏不是一个大问题。不像以前在 C++ 中那样。
大家讨论得很好,但让我澄清一下……根据定义,如果 .NET 中没有对对象的引用,那么它会在某个时候被垃圾收集。所以这不是导致内存泄漏的方法。
在托管环境中,如果您意外引用了您不知道的任何对象(因此我的问题中有两个示例),我会认为这是内存泄漏。
那么,发生这种内存泄漏的各种可能方式是什么?
【问题讨论】:
-
正如基思所说,您的样本不会导致内存泄漏。
标签: .net optimization memory-leaks