如何清除()控件而不会导致内存泄漏

时间:2011-10-09 17:32:45

标签: c# winforms memory-leaks

在阅读导致内存泄漏的Control.Clear();后(在MSDN验证),我想知道是否:

while (Controls.Count > 0) Controls[0].Dispose();

就足够了,还是我必须递归遍历控件中的所有控件?

另外,之后有没有理由做Control.Clear();? (因为我看到有人说某处)?

感谢。

1 个答案:

答案 0 :(得分:6)

发布的代码段是正确的。不需要Clear(),Control.Dispose()方法已从Controls集合中删除控件。这就是它起作用的原因。

循环的不太令人担忧的版本是:

 for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();

无需遍历控件的子项并将其置于已经自动发生的状态。