最近、WPFプロジェクトで深刻なメモリリークに気づきました。プロジェクトを単純化すると、ログインフォームとメインフォームがあります。メインフォームには、約30個のユーザーコントロールと3個のボタンで構成される1個のユーザーコントロール、3個のボタンとInfragisticsデータグリッドを持つ1個のユーザーコントロールがあります。私はバックグラウンドワーカーを使用して、データグリッドに対してのみ30秒ごとにDBにクエリを実行します。
main form.closedを使用してメインフォームからログアウトし、ログインウィンドウを再起動した後、ANTSメモリプロファイラー7で測定された6〜7 MBの増加があることに気付きました。未登録のイベントハンドラーがある場合でも、変数をnullに設定します。 GC.Collect()と呼ばれ、メモリリークは同じです。私の質問は次のとおりです。1。wpfウィンドウを閉じてもメモリとリソースが解放されないのはなぜですか。ANTsプロファイラーでウィンドウを閉じた後も、多くの文字列(ほとんどがGUIからのもの)がまだメモリに残っていることがわかります。2.リソースイベントセッターによって定義されたイベントの登録を解除する必要がありますか?XAMLで宣言されたイベントの登録を解除する必要がありますか?3. WPFのメモリリークから、GC.Collect()を使用すべきではないと言われましたが、少し改善されています。使ってみませんか?