在 .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 中没有对对象的引用,它将在某个时候被垃圾收集。所以这不是诱发内存泄漏的方法。
在托管环境中,如果您无意中引用了您不知道的任何对象(因此我的问题中有两个示例),我会认为这是内存泄漏。
那么,发生这种内存泄漏的各种可能方式是什么?