2011-01-18 17 views
1

Windowsフォームアプリケーションでは、フォームを閉じると(Formから抜き出せます)、FormClosingとFormClosedイベントが発生しますが、デストラクタは決して起動しません。それはまだメモリを占有しています。Windowsフォームがクローズされていますが破棄されていません

フォームを閉じたときにフォームを完全に破棄する方法についてのアイデアはありますか?

答えて

0

これは基本的にどちらかあなたがしていることを意味します。どこか

  • (それはまた、オブジェクトへの参照のようなものだ)イベントに耳を傾けオブジェクトを持つオブジェクトへの参照を保持

    1. ガベージコレクタは、フォームへの参照がなくなるまで、フォームを解放しません。

      廃棄する重要なリソースがある場合は、IDisposableとし、Disposeメソッドを使用します。

    +0

    あなたのお返事ありがとうございます。私はFormClosedイベントでクリーンアップジョブを実行していますが、閉じた後でも同じメモリを保持しています。このフォームは内部フォームなので、閉じてもアプリケーションは終了しません。 –

    0

    デストラクタ(またはより正確には、ファイナライザ - .NETにデストラクタはありません)は.NETで実行することは保証されていません - オブジェクトはランタイムまたは決してのまわりでクリーンアップできます。今まで呼ばれていたファイナライザメソッドに頼ることはできません。

    フォームが閉じているときに何かする必要がある場合は、Closedイベントを処理します。

    管理されていないリソース(オープンされているファイルを閉じるなど)をリリースする必要がある場合は、このロジックをDispose()メソッドに追加します。

    メモリの使用が心配な方は、メモリの使用について心配する必要はありません。ランタイムは、独自のロジックに基づいてメモリを自動的に管理します。

    参考:それは破壊されなければならないとは思いませんガベージコレクタを意味している破壊されていない場合Garbage Collection (MSDN)

    関連する問題