1

WPF で wpf データ グリッド コントロールから継承されたカスタム データ グリッド コントロールを作成しました。

したがって、ユーザーがデータベースにクエリを実行すると、数百のレコードがそれぞれ 15 ~ 20 列で返されます。

画面を制御すると、この画面とそのグリッドに割り当てられているすべてのメモリが GC によって再利用されるべきだと私は信じていました。しかし、そうではありません。

Red Gate の Memory Profiler でアプリケーションをテストしていたところ、画面を開くと 30 MB のメモリが割り当てられていることが示されました。

しかし、この画面を閉じると、アプリケーションはどういうわけかまだそのメモリを保持しています.antメモリプロファイラで理由を調べていると、カスタムデータグリッドのために画面のインスタンスがまだメモリ内にあることがわかります.

ユーザー コントロールに unload イベントを追加し、プロセス中にアタッチしたすべてのイベント ハンドラーを切り離しました。

私は何を見逃して、何をすべきですか?

4

1 に答える 1

0

UserControl を破棄する必要はなく、おそらく IDisposable UserControl を構築するべきではありません。それがデザインの匂いです。メモリ プロファイラーは、アプリケーションがまだそのメモリを保持している理由を教えてくれるので、そのバグを修正する必要があります。

アップデート:

ANTS でそのメモリを実際に保持している人を見つけるには、インスタンス保持グラフ機能を使用します。.NET Memory Profiler (ANTS よりも私が好む) では、Root Pathと呼ばれます。

于 2013-01-24T08:35:07.830 に答える