メモリ リークがある MVP プロジェクトがあります (これは Web プロジェクトではありません)。データベースからフォームのグリッドにデータをロードするたびに、メモリが増加します。そのフォームに接続されている各オブジェクトを、ANTS と .NET メモリ プロファイラーで調査してみました。
フォームを開閉するときにフォームに接続されているオブジェクトは、インスタンス保持グラフでは次のようになります。
A -> B : -> にマークされた object1。(参照) B -> A : -> にマークされた object2。(参照先) A、B はクラス
それは正しいアプローチの次の方向ですか?1. 実装されていない各 .cs モジュールでmsdn.comIDisposable
のpattern1 を基本クラスに実装します。
- 派生クラスでは、msdn から pattern2 を実装するクラス (
Dispose
メソッドをオーバーライドするもの) Dispose
メソッドの「管理対象リソース」セクションに、オブジェクト/その他の参照 (object.property、object.other_field) をクリアする関数を配置します。オブジェクトがその.csで使用されなくなったときに、オブジェクトをnullまたはobject.Dispose()に強制します(.csごとにこれを行いますか?または別の方法があります)
これらすべてのメソッドと GC を強制的に実行するにはどうすればよいでしょうか。フォームを閉じるときに明示的に言ってみましょう。
特定の .cs からオブジェクトを削除すれば十分ですか?
ありがとう