0

WindowsForms ソリューションに、メモリ リークの問題があるフォームがあります。フォームは MainForm のボタンで開きます。複数回開いた後、未処理の例外によってアプリケーションが終了します。

そのフォームは MainForm にプライベート インスタンスを持ち、閉じられるか、いくつかのロジック ルールに従って再作成されます。

その子フォームには、MainForm からのデリゲートがいくつか含まれています。デリゲートがメモリリークを引き起こす可能性があると思います。おそらく、フォームが閉じられたり再作成されたりすると、古いインスタンスがデリゲートにリンクされたメモリに保持される可能性があります。

フォーム内のデリゲートを「破棄」する方法と場所は?

Protected Overrides Sub Finalize() ' here?

Protected Overrides Sub OnHandleDestroyed(e As System.EventArgs) ' or here
  Me._MyDelegate1 = Nothing
  Me.DlgDelegate1 = Nothing
  Me.DlgDelegate2 = Nothing
4

1 に答える 1

0

このようなクリーンアップには、メソッドのオーバーライドがForm.Dispose最も適切な場所です。デザイナですでにオーバーライドされている可能性があります。その場合は、コードファイルに移動する必要があります。

これは、オーバーライドに関する別の投稿Fom.Disposeです。WinFormのDisposeメソッドを拡張するにはどうすればよいですか?

于 2013-01-31T01:03:08.630 に答える