2012-01-19 14 views
0

私はWPFの初心者で、カスタムコントロールをほとんど開発していません。私はいつも私のカスタムコントロールのメモリリークを遭遇しています。私のコントロールはビジュアルツリーから削除されても、メモリから削除されませんでした。メモリリークを伴うカスタムコントロール

我々はWPFでのメモリリークのないカスタムコントロールを作成するに従わなければならない任意のデザインパターンはありますか?

それとも私たちがこれを行うにはIDisposableを使用できますか?しかし、この場合、Dispose()メソッドは暗黙的に呼び出されません。 WPFコントロールのButton、TextBoxなどのFrameowrkビルドはIDisposableではないようです。しかし、彼らは記憶が漏れません。

任意の迅速なアドバイスを本当に感謝しています。すべてのイベントが未登録になるまで予め

おかげで、

+0

RE 'IDisposable'実装。 'Dispose()'は暗黙に呼び出されていないので、あなた自身で呼び出す必要があります。 REメモリリーク'UserControl'(イベントハンドラを含む)への参照をすべて削除してもよろしいですか?そうでない場合、ガベージコレクタは、クリーンアップの準備が整っていない可能性があります。また、問題のサンプルを提供するコードを投稿することはできますか? –

+0

@WPF Loverあなたのコントロールがまだメモリに残っていることをどのように知っていますか? –

+0

@Dimitry:私は赤いゲートでプロファイリングしていますANTS –

答えて

0

Jawaharロードなど、登録されたイベントを有する成分は、アンロードされません。 イベントを登録しなくても登録を忘れないようにしてください。

スレッドがまだ実行中の場合もあります。

+0

ありがとう、私はイベントを登録解除するのが適切な場所がわかります。 Unloadedイベントを使用できますか?しかし、UnloadedはインスタンスがDispose()しようとしているときだけ呼び出すとは期待できません。 Conisder私のカスタムコントロールはタブアイテムにあります。 –

関連する問題