尝试替换Controls.Clear()以避免内存泄漏不起作用-为什么?
本文关键字:泄漏 内存 不起作用 为什么 替换 Controls Clear | 更新日期: 2023-09-27 18:11:00
我替换了:
panel.Controls.Clear();
:
Clear(panel);
地点:
public static void Clear(Control ctrl)
{
while (ctrl.Controls.Count > 0) ctrl.Controls[0].Dispose();
}
我得到以下错误:在Application.Run(new Form1());
系统。ObjectDisposedException未处理。处理步骤无法访问已处置的对象。对象名称:'Label'.
知道这是为什么吗?
谢谢。
编辑:参见如何清除()控件而不导致内存泄漏
编辑:对不起,我可能正在处理一些我只想从它的父对象中删除的东西。我来查一下。谢谢你的回答。
Dispose()
在正常情况下与内存没有关系。它不会释放内存,不会从集合中删除对象,也不会调用垃圾收集器。相反,.Dispose()
的目的是清理非内存资源:数据库连接,套接字,设备句柄,gdi句柄等。
这可能帮助您修复内存问题的唯一方法是,如果您使用的自定义控件每个依赖于非托管(非。net) dll中的代码。
您需要删除您处置的控件,但可能有更好的方法:
public static void Clear(Control ctrl)
{
foreach(Control c in ctrl.Controls) c.Dispose();
ctrl.Controls.Clear();
}
我可能是在处理一些Control
,我将在后面的代码中使用。