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

前端之家收集整理的这篇文章主要介绍了c# – 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方法中,您需要确保您已经取消订阅范围之外的任何事件.如果你不这样做,那个参考将保持你的对象活着.

原文链接:https://www.f2er.com/csharp/91788.html

猜你在找的C#相关文章