试图替换Controls.Clear()以避免内存泄漏不起作用 – 为什么?
我换了:
panel.Controls.Clear();
有:
Clear(panel);
哪里:
public static void Clear(Control ctrl) { while (ctrl.Controls.Count > 0) ctrl.Controls[0].Dispose(); }
我得到以下错误:在Application.Run(new Form1());
System.ObjectDisposedException未处理无法访问已处置的对象。 对象名称:’标签’。
知道为什么会这样吗?
谢谢。
编辑:请参阅如何清除()控件而不会导致内存泄漏
编辑:对不起,我可能正在处理我想从其父母中删除的内容。 我会检查一下。 谢谢你的回答。
在正常情况下, Dispose()
与内存无关 。 它不释放内存,它不会从集合中删除对象,也不会调用垃圾收集器。 相反, .Dispose()
的目的是清理非内存资源:数据库连接,套接字,设备句柄,gdi句柄等。
这可能有助于解决内存问题的唯一方法是,如果您使用的是自定义控件,每个控件都依赖于非托管(非.Net)dll中的代码。
您需要删除您处置的控件,但可能有更好的方法:
public static void Clear(Control ctrl) { foreach(Control c in ctrl.Controls) c.Dispose(); ctrl.Controls.Clear(); }
我可能正在处理稍后在代码中使用的一些Control
。