Windowsフォームアプリケーションでは、フォームを閉じると(Formから抜き出せます)、FormClosingとFormClosedイベントが発生しますが、デストラクタは決して起動しません。それはまだメモリを占有しています。Windowsフォームがクローズされていますが破棄されていません
フォームを閉じたときにフォームを完全に破棄する方法についてのアイデアはありますか?
Windowsフォームアプリケーションでは、フォームを閉じると(Formから抜き出せます)、FormClosingとFormClosedイベントが発生しますが、デストラクタは決して起動しません。それはまだメモリを占有しています。Windowsフォームがクローズされていますが破棄されていません
フォームを閉じたときにフォームを完全に破棄する方法についてのアイデアはありますか?
。
これは基本的にどちらかあなたがしていることを意味します。どこか
ガベージコレクタは、フォームへの参照がなくなるまで、フォームを解放しません。
廃棄する重要なリソースがある場合は、IDisposable
とし、Disposeメソッドを使用します。
デストラクタ(またはより正確には、ファイナライザ - .NETにデストラクタはありません)は.NETで実行することは保証されていません - オブジェクトはランタイムまたは決してのまわりでクリーンアップできます。今まで呼ばれていたファイナライザメソッドに頼ることはできません。
フォームが閉じているときに何かする必要がある場合は、Closedイベントを処理します。
管理されていないリソース(オープンされているファイルを閉じるなど)をリリースする必要がある場合は、このロジックをDispose()メソッドに追加します。
メモリの使用が心配な方は、メモリの使用について心配する必要はありません。ランタイムは、独自のロジックに基づいてメモリを自動的に管理します。
参考:それは破壊されなければならないとは思いませんガベージコレクタを意味している破壊されていない場合Garbage Collection (MSDN)
あなたのお返事ありがとうございます。私はFormClosedイベントでクリーンアップジョブを実行していますが、閉じた後でも同じメモリを保持しています。このフォームは内部フォームなので、閉じてもアプリケーションは終了しません。 –