尝试替换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'.

知道这是为什么吗?

谢谢。

编辑:参见如何清除()控件而不导致内存泄漏

编辑:对不起,我可能正在处理一些我只想从它的父对象中删除的东西。我来查一下。谢谢你的回答。

尝试替换Controls.Clear()以避免内存泄漏不起作用-为什么?

Dispose()在正常情况下与内存没有关系。它不会释放内存,不会从集合中删除对象,也不会调用垃圾收集器。相反,.Dispose()的目的是清理非内存资源:数据库连接,套接字,设备句柄,gdi句柄等。

这可能帮助您修复内存问题的唯一方法是,如果您使用的自定义控件每个依赖于非托管(非。net) dll中的代码。

您需要删除您处置的控件,但可能有更好的方法:

public static void Clear(Control ctrl)
{
    foreach(Control c in ctrl.Controls) c.Dispose();
    ctrl.Controls.Clear();
}

我可能是在处理一些Control,我将在后面的代码中使用。