1

我正在考虑处理资源,并对不同的处理方式有点混淆。

我刚刚发现在 ShowDialog() 显示的表单上使用 Close() 只是实际上隐藏了它,并没有完全杀死它,可以这么说。虽然这对我目前想要的很有用,但我现在担心其他地方的内存泄漏。

使用 ShowDialog() 后,我应该总是在表单上调用 Dispose() 还是使用 Using 块?有区别吗?或者当退出创建子程序时表单会被自动处理吗?例如,我典型的简单用法之一:

Private Sub btnEdit_Click(sender As System.Object, e As System.EventArgs) Handles btnEdit.Click
Dim frm As New frmSomething()
frm.ShowDialog()

'frm is exited by clicking the X or using Close()
'At this point, frm is still in memory.  Is it automatically disposed of
'after the End Sub here, or should I do frm.Dispose() ?

End Sub
4

1 回答 1

4

它不会被自动处理,不。它可能不会导致问题,并且很可能有一个终结器来完成所需的一切,因此成本只是终结器运行之前的一些额外资源(以及最终 GC 之前的更长延迟),但最好处理它明确 - 理想情况下有一个Using声明:

Using frm As New frmSomething()
    frm.ShowDialog()
End Using
于 2012-09-02T08:12:39.990 回答