C# 我是否需要在使用完表单后处理它?

C# 我是否需要在使用完表单后处理它?,c#,.net-3.5,C#,.net 3.5,我知道C#是一种自动垃圾收集语言,但如果我处理表单,我会注意到区别吗?例如: SettingsDialog dialog; private void settingsToolStripMenuItem_Click(object sender, EventArgs e) { dialog = new SettingsDialog(); dialog.ShowDialog(); dialog.FormClosed += new FormClosedEventHandler(d

我知道C#是一种自动垃圾收集语言,但如果我处理表单,我会注意到区别吗?例如:

SettingsDialog dialog;
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
    dialog = new SettingsDialog();
    dialog.ShowDialog();
    dialog.FormClosed += new FormClosedEventHandler(dialog_FormClosed);
}
void dialog_FormClosed(object sender, FormClosedEventArgs e)
{
    dialog.Dispose();
}
或者我应该把它作为:

private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
{
    SettingsDialog dialog = new SettingsDialog();
    dialog.ShowDialog();
}
此外,如果设置Dialog消耗大量内存怎么办?这会有所不同吗

提前感谢

只需使用:

using(SettingsDialog dialog = new SettingsDialog())
{
    dialog.ShowDialog();
}

这将自动处理
对话框。

经验法则是始终执行
IDisposable
接口的类型的实例。以资源保护的方式实现这一点的最简单方法是按照的使用
using
语句

等待终结器,虽然在很多情况下不是有害的,但在某些情况下会对您造成伤害,因为您不知道它何时会发生(不确定)


完成后最好坚持处理。

任何实现IDisposable的东西的契约都规定,“所有者”将以正确编写的代码调用Dispose。不管Dispose实现当前是否什么都不做。终结器是否[最终]可以执行与Dispose相同的操作并不重要。不根据需要调用Dispose(直接或间接)违反合同。(这就是为什么添加或删除IDisposable接口是一个突破性的更改。)在这种情况下,Finalize将错过一些重要的事情,如销毁句柄等。