1

私はリソースの処分を検討しており、それを行うさまざまな方法について少し混乱しています。

ShowDialog() で表示されたフォームで Close() を使用しても、実際にはフォームが非表示になるだけで、いわば完全に削除されないことがわかりました。これは、現時点で必要なものには役立ちますが、他の場所でのメモリ リークについて心配しています。

ShowDialog() を使用した後、常にフォームで Dispose() を呼び出すか、Using ブロックを使用する必要がありますか? 違いはありますか?それとも、作成したサブルーチンを終了するときに、フォームは自動的に破棄されますか? たとえば、私の典型的な単純な使用法の 1 つ:

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 に答える