在阅读导致内存泄漏的Control.Clear();
后(在MSDN验证),我想知道是否:
while (Controls.Count > 0) Controls[0].Dispose();
就足够了,还是我必须递归遍历控件中的所有控件?
另外,之后有没有理由做Control.Clear();
? (因为我看到有人说某处)?
感谢。
答案 0 :(得分:6)
发布的代码段是正确的。不需要Clear(),Control.Dispose()方法已从Controls集合中删除控件。这就是它起作用的原因。
循环的不太令人担忧的版本是:
for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();
无需遍历控件的子项并将其置于已经自动发生的状态。