我使用的是TableLayoutPanel
其动态填充其它TablelayoutPanels
。
现在,我不知道如果我说会发生什么TableLayoutPanel.Controls.Clear
上动态填充TableLayoutPanel
。 显然,所有的子布局被删除,但如何对自己的孩子? 他们是否妥善处置,以及或者我需要担心内存泄漏?
我应该递归调用之前取出孩子的孩子Clear()
我使用的是TableLayoutPanel
其动态填充其它TablelayoutPanels
。
现在,我不知道如果我说会发生什么TableLayoutPanel.Controls.Clear
上动态填充TableLayoutPanel
。 显然,所有的子布局被删除,但如何对自己的孩子? 他们是否妥善处置,以及或者我需要担心内存泄漏?
我应该递归调用之前取出孩子的孩子Clear()
清除不配置的控制,导致内存泄漏。 从链接:
调用清除方法不会从内存中删除控制手柄。 您必须显式调用Dispose方法,以避免内存泄漏。
由于环内设置食堂的索引,您可以控制集合复制到另一个目录并执行ForEach
对他们的循环或使用后向For
循环。
for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i)
myTableLayoutPanelControls[i].Dispose();
调用Dispose
会从内存中删除控制(当GC它拾起)。 这也将处理子控件的的调用Dispose
方法。
一个前提条件是,如果你已经有了一个实现自定义控制IDisposable
或您要替换Dispose
方法不调用base
方法。 在你的对象Dispose
方法,你需要确保你从范围以外的任何事件退订。 如果你不这样做,该引用将让您的对象还活着。
有一个在你的问题有点混乱。 Clear()
将删除引用和目的将通过垃圾收集器来收集。
但是,你也用这个词dispose
。 清除对象将不会被设置在这个意义上,它们的Dispose
方法将被调用。
因此,如果你不使用这些对象了,并且要Dispose
他们来叫,你必须自己做。