gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:02:06 24 4
gpt4 key购买 nike

我正在使用一个 TableLayoutPanel,它动态填充了其他 TablelayoutPanel

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

我应该在调用 Clear() 之前递归地删除 child 的 child 吗?

最佳答案

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();

调用 Dispose 将从内存中删除控件(当 GC 拾取它时)。这还将处理子控件的 Dispose 方法的调用。

一个问题是,如果您有一个实现了 IDisposable 的自定义控件,或者您在没有调用 base 的情况下重写了 Dispose 方法方法。在您对象的 Dispose 方法中,您需要确保您已取消订阅您范围之外的任何事件。如果不这样做,该引用将使您的对象保持事件状态。

关于c# - Controls.Clear() 清理多深?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com