2

我知道这个问题已经被问过了,但我的问题比我见过的其他问题更笼统。

当我在我的程序中检查我对控件的使用Forms以及DB(命令、阅读器等)的命令时,我想到了以下问题:

如果我有一个控件,我不应该Dispose在我使用它之后吗?

这样,我将确保我的程序仅使用所需的资源,如果我必须使用已经释放的控件,那么我将再次加载它。

也许有理由不总是处理所有东西,但这就是我问这个问题的原因。

感谢您的任何回答,我希望我说清楚了。

4

4 回答 4

7

您创建的非可视组件(命令、读取器、I/O 组件,基本上是任何实现的组件IDisposable)都应该在您完成它们之后被释放。

对于可视控件,Form'Dispose函数应该Controls自动处理其集合中的所有控件,因此您只需要担心Controls出于某种原因从表单中删除的控件。

除非您遇到严重的内存问题,否则尝试手动处理表单控件可能是一种微优化。

于 2012-09-05T13:30:56.283 回答
4

是的,如果没有具体的理由反对它,您可能应该处置所有东西。控件在 aForm和中时会自动Form释放。

不处理 UI 资源并不是很有害。只是比必要的系统资源使用多一点内存。在大多数情况下,这不是功能问题。

当然,这与数据库连接和文件相反!处置它们至关重要。

于 2012-09-05T13:31:20.900 回答
0

如果您使用的是非托管资源,那么可以。继续并实施IDisposable,使用using将简化您的工作。但并非总是如此,至于你的问题。您的控件(UI 控件)已经实现了此 IDisposable,并且在关闭时将由其父级调用。

于 2012-09-05T13:31:23.577 回答
0

是的你应该。在 Windows 窗体窗口(或分别在容器内)中,窗体设计器会为您执行此操作:

protected override void Dispose(bool disposing)
{
    if(disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}
于 2012-09-05T13:32:24.837 回答