试图替换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