c# – Controls.Clear()清理了多深?
我正在使用一个TableLayoutPanel动态填充其他TablelayoutPanels.
现在我想知道当我在动态填充的TableLayoutPanel上调用TableLayoutPanel.Controls.Clear时会发生什么.显然,所有的子布局都被删除,但是他们的孩子呢?它们是否妥善处理,还是需要担心内存泄漏? 在调用Clear()之前,我应该递归删除孩子吗? 解决方法
Clear不配置控件,导致内存泄漏.从链接:
由于在循环中处理会使索引变得混乱,您可以将控件集合复制到另一个列表,并对它们执行ForEach循环或使用向后的For循环. for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i) myTableLayoutPanelControls[i].Dispose(); Calling Dispose将从内存中删除控件(GC选择时).这也将处理调用子控件的Dispose方法. 一个抓住是如果你有一个实现IDisposable的自定义控件,或者你在不调用基本方法的情况下覆盖Dispose方法.在对象的Dispose方法中,您需要确保您已经取消订阅范围之外的任何事件.如果你不这样做,那个参考将保持你的对象活着. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |