isp*_*iro 2 c# memory-leaks winforms
在阅读了Control.Clear();导致内存泄漏(在MSDN上验证)之后,我想知道是否:
while (Controls.Count > 0) Controls[0].Dispose();
Run Code Online (Sandbox Code Playgroud)
就足够了,还是我必须递归遍历控件中的所有控件?
此外,有没有理由Control.Clear();在那之后做一个?(因为我看到有人说某处)?
谢谢.
已发布的代码段是正确的.不需要Clear(),Control.Dispose()方法已从Controls集合中删除控件.这就是它的原因.
循环的不太令人担忧的版本是:
for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();
Run Code Online (Sandbox Code Playgroud)
无需遍历控件的子代并处理它们,这已经自动发生.