Controls.Clear()清理多深?

Xas*_*ser 10 c# tablelayoutpanel clear winforms

我正在使用一个TableLayoutPanel动态填充其他的TablelayoutPanels.

现在我想知道当我调用TableLayoutPanel.Controls.Clear动态填充时会发生什么TableLayoutPanel.显然,所有的子布局都被删除了,但他们的孩子怎么样?它们是否也妥善处理,还是需要担心内存泄漏?

我应该在打电话之前递归删除孩子的孩子Clear()吗?

key*_*rdP 16

Clear不会丢弃控件,导致内存泄漏.从链接:

调用Clear方法不会从内存中删除控制句柄.您必须显式调用Dispose方法以避免内存泄漏.

由于在循环中进行处理会使索引变得混乱,因此您可以将控件集合复制到另一个列表并对ForEach它们执行循环或使用向后For循环.

 for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i) 
    myTableLayoutPanelControls[i].Dispose();
Run Code Online (Sandbox Code Playgroud)

调用Dispose将从内存中删除控件(当GC选择它时).这也将处理子控件Dispose方法的调用.

一个问题是,如果你有一个自定义控件实现,IDisposable或者你在Dispose不调用方法的情况下覆盖base方法.在您的对象的Dispose方法中,您需要确保您已取消订阅范围之外的任何事件.如果不这样做,那么引用将使您的对象保持活力.