1

WPF アプリケーションでメモリ リークが発生しています。.NET Memory Profiler を使用すると、ウィンドウを閉じた後でも、Dispatcher キューの DispatcherOperations にある Action デリゲートのために、DataContext と UI 要素がすべて固執していることがわかります...ただし、ContextIdle 優先度があり、決してそうではないようです処理されます。

ウィンドウが閉じられたときに Dispatcher キューを強制的にフラッシュすることはできますか?

4

1 に答える 1

0

Window.Closingイベントでdispatcher.Invokeを優先してContextIdleを使用して、ダミーメソッドへの同期呼び出しを含めることができます。これにより、UIスレッドがそれ以上のディスパッチャーアイテムを生成するのを停止し、最後のContextIdleアイテムが処理された後にのみ戻る必要があります。ただし、Telerikコンポーネントがないと、ウィンドウが閉じる前にContextIdleアイテムが処理されるため、確認できませんでした。

また、これらのアイテムがループで実行されること、つまり、実行中に新たに作成されることも想像できます。その場合、ウィンドウを閉じる前に、DataContextを明示的にnullに設定すると役立つ場合があります。これは、コンポーネントがループを停止できることをコンポーネントに通知する可能性があり、少なくとも、この方法でデータコンテキストオブジェクトのインスタンスをリークすることはありません。

于 2013-02-09T09:00:31.703 に答える