加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Controls.Clear()清理了多深?

发布时间:2020-12-15 04:23:18 所属栏目:百科 来源:网络整理
导读:我正在使用一个TableLayoutPanel动态填充其他TablelayoutPanels. 现在我想知道当我在动态填充的TableLayoutPanel上调用TableLayoutPanel.Controls.Clear时会发生什么.显然,所有的子布局都被删除,但是他们的孩子呢?它们是否妥善处理,还是需要担心内存泄漏?
我正在使用一个TableLayoutPanel动态填充其他TablelayoutPanels.

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

在调用Clear()之前,我应该递归删除孩子吗?

解决方法

Clear不配置控件,导致内存泄漏.从链接:

Calling the Clear method does not remove control handles from memory.
You must explicitly call the Dispose method to avoid memory leaks.

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

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

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

一个抓住是如果你有一个实现IDisposable的自定义控件,或者你在不调用基本方法的情况下覆盖Dispose方法.在对象的Dispose方法中,您需要确保您已经取消订阅范围之外的任何事件.如果你不这样做,那个参考将保持你的对象活着.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读