我知道这个问题已经被问过了,但我的问题比我见过的其他问题更笼统。
当我在我的程序中检查我对控件的使用Forms
以及DB
(命令、阅读器等)的命令时,我想到了以下问题:
如果我有一个控件,我不应该Dispose
在我使用它之后吗?
这样,我将确保我的程序仅使用所需的资源,如果我必须使用已经释放的控件,那么我将再次加载它。
也许有理由不总是处理所有东西,但这就是我问这个问题的原因。
感谢您的任何回答,我希望我说清楚了。
您创建的非可视组件(命令、读取器、I/O 组件,基本上是任何实现的组件IDisposable
)都应该在您完成它们之后被释放。
对于可视控件,Form
'Dispose
函数应该Controls
自动处理其集合中的所有控件,因此您只需要担心Controls
出于某种原因从表单中删除的控件。
除非您遇到严重的内存问题,否则尝试手动处理表单控件可能是一种微优化。
是的,如果没有具体的理由反对它,您可能应该处置所有东西。控件在 aForm
和中时会自动Form
释放。
不处理 UI 资源并不是很有害。只是比必要的系统资源使用多一点内存。在大多数情况下,这不是功能问题。
当然,这与数据库连接和文件相反!处置它们至关重要。
如果您使用的是非托管资源,那么可以。继续并实施IDisposable,使用using将简化您的工作。但并非总是如此,至于你的问题。您的控件(UI 控件)已经实现了此 IDisposable,并且在关闭时将由其父级调用。
是的你应该。在 Windows 窗体窗口(或分别在容器内)中,窗体设计器会为您执行此操作:
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}