-->

有多深不Controls.Clear()清理?(How deep does Controls.Cle

2019-08-17 22:19发布

我使用的是TableLayoutPanel其动态填充其它TablelayoutPanels

现在,我不知道如果我说会发生什么TableLayoutPanel.Controls.Clear上动态填充TableLayoutPanel 。 显然,所有的子布局被删除,但如何对自己的孩子? 他们是否妥善处置,以及或者我需要担心内存泄漏?

我应该递归调用之前取出孩子的孩子Clear()

Answer 1:

清除不配置的控制,导致内存泄漏。 从链接:

调用清除方法不会从内存中删除控制手柄。 您必须显式调用Dispose方法,以避免内存泄漏。

由于环内设置食堂的索引,您可以控制集合复制到另一个目录并执行ForEach对他们的循环或使用后向For循环。

 for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i) 
    myTableLayoutPanelControls[i].Dispose();

调用Dispose会从内存中删除控制(当GC它拾起)。 这也将处理子控件的的调用Dispose方法。

一个前提条件是,如果你已经有了一个实现自定义控制IDisposable或您要替换Dispose方法不调用base方法。 在你的对象Dispose方法,你需要确保你从范围以外的任何事件退订。 如果你不这样做,该引用将让您的对象还活着。



Answer 2:

有一个在你的问题有点混乱。 Clear()将删除引用和目的将通过垃圾收集器来收集。

但是,你也用这个词dispose 。 清除对象将不会被设置在这个意义上,它们的Dispose方法将被调用。

因此,如果你不使用这些对象了,并且要Dispose他们来叫,你必须自己做。



文章来源: How deep does Controls.Clear() clean up?