閱讀Control.Clear();
導致內存泄漏(在MSDN驗證)後,我在想,如果:如何清除()控制,而不會造成內存泄露
while (Controls.Count > 0) Controls[0].Dispose();
就足夠了,還是我遞歸遍歷通過控件內的所有控件?
此外,是否有任何理由在此之後做Control.Clear();
? (正如我看到有人在某處說的)?
謝謝。
閱讀Control.Clear();
導致內存泄漏(在MSDN驗證)後,我在想,如果:如何清除()控制,而不會造成內存泄露
while (Controls.Count > 0) Controls[0].Dispose();
就足夠了,還是我遞歸遍歷通過控件內的所有控件?
此外,是否有任何理由在此之後做Control.Clear();
? (正如我看到有人在某處說的)?
謝謝。
張貼的片段是正確的。不需要Clear(),Control.Dispose()方法已經從Controls集合中刪除控件。這是它工作的原因。
循環的那麼令人震驚的版本是:
for (int ix = Controls.Count-1; ix >= 0; --ix) Controls[ix].Dispose();
無需通過控制的兒童進行迭代和處理他們,已經自動發生。
你的代碼會無限循環。 – svick
@svick每個Dispose()之後的編號 - 控件[1]成爲'Controls [0]'。 – ispiro
Technichally否,因爲dispose不會刪除實際的對象,只是釋放其資源,正如我在我的回答中所說的,必須在調用dispose後顯式刪除引用。 –