私たちは、基本としてWPFcontrolsを継承し、必要に応じてそれをカスタマイズすることによって、多くのカスタムコントロールを使用しています。
ただし、これらのコントロールで使用されているメモリは、コントロールを使用しているページが閉じられた後でも、アプリケーション全体が閉じられるまで解放されません。
これらのアプリケーションは1日中動作する必要があるため、ますます多くのメモリが使用できなくなるにつれてパフォーマンスが低下します。
ページをプロファイリングしたところ、コントロールが収集されず、結合参照や境界線やブラシなどがそのコントロールから消去されない場合がありました。
コントロールのUnloadイベントを使用しようとしましたコントロールからイベントといくつかの参照を削除します。これはリークをある程度減らしましたが、これはページのクローズを遅くしました。また、コントロールが折りたたまれたときにもunloadイベントが発生しました。
リークを克服するための他の方法はありますか?メモリリークを防ぐためのベストプラクティスはありますか?
ありがとう
アーヴィンド
回答:
回答№1は1静的メンバーを使用していますか? (特にコレクションやイベント)
そうであれば、それらが「アンロードされたとき」それらからあなたのコントロールを削除することを確認してください。
EDIT:あなたの後にコントロール(そのページが閉じられたとき)、それをビジュアルツリーから削除し、それに対してDisposeを呼び出し、そしてそれがどこかで参照されていないことを確認するためにメモリプロファイラーを使用するべきです。
メモリプロファイラを使用して、どのオブジェクトがリークしているのか、またその理由を調べます。