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

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

Clear不会释放控件,从而导致内存泄漏。从链接:

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

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

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

myTableLayoutPanelControls[i].Dispose();

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

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

相关创作

防治蚜虫,这八种农药效果非常好!
365娱乐场体育投注

防治蚜虫,这八种农药效果非常好!

📅 07-11 👁️ 5732
内地往香港打电话:详细攻略
365娱乐场体育投注

内地往香港打电话:详细攻略

📅 06-29 👁️ 3952
英雄主义词语解释
365bet进入官网

英雄主义词语解释

📅 10-15 👁️ 3970