2011-10-12 63 views
2

我知道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(); 
} 

而且,如果SettingsDialog消耗大量的内存?这会有所作为吗?

在此先感谢

+0

实现IDisposable的* anything *的* contract *指示Dispose *将被正确编写的代码中的“所有者”调用。 Dispose实现目前什么都不做都没关系。终结者可能会[最终]完成与Dispose相同的内容并不重要。不会根据需要调用Dispose(直接或间接)违反合同。 (这就是为什么添加或删除IDisposable接口是一个突破性改变。) – 2011-10-12 04:12:27

回答

3

只需使用:

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

这将自动处置dialog

1

经验法则是始终使用Dispose()实现IDisposable接口的类型实例。以资源保护的方式做到这一点的最简单方法是根据Petranswer采用using声明。

等待终结者,虽然在许多情况下无害,但在某些情况下会咬你,因为你不知道什么时候会发生(非确定性)。

当你完成后最好处理。

+0

Finalize在这种情况下会丢失一些重要的东西,比如销毁句柄等。 – Will

相关问题