0

現在、大量のメモリ リークを起こしている既存の Silverlight アプリケーションを修正する必要があります。Redgate の ANT プロファイラーを使用して、考えられる問題を検出することができました。そのうちの 1 つは Web サービスをラップする静的クラスで、非同期計算をサポートする 2 つのイベント ハンドラーが含まれています。
ご想像のとおり、多くのオブジェクトがこのハンドラーにイベントを割り当てますが、ほとんどのオブジェクトはそれを再び解放しません。その結果、これらのオブジェクトはこれらの静的イベントにリンクされているため、解放されることはほとんどありません...

この問題を回避するには、簡単な修正が必要です。では、これらの変更が大きな影響を与えることなく、このメモリ リークを修正するために必要なオプションは何ですか?

イベント ハンドラーを非静的にすると、大きな変更が発生するため、望ましくないアクションが発生します...

4

1 に答える 1

2

弱いイベント パターンを使用します(SL で可能かどうかはわかりません)。これにより、静的メソッドを呼び出すことで、より汚れたプログラミング モデルが可能になります。

より良い代替手段は、イベントを適切にサブスクライブ/サブスクライブ解除することです (tomasmcguinness に同意します) が、これは、呼び出しコードを変更したり、消費者に開発を改善するよう依頼したりできることを意味します。

別の解決策として、非同期パターンを使用できます。メソッド呼び出しで Callback デリゲートを待機するか、Task オブジェクトを返すことをお勧めします。

于 2012-04-24T08:47:46.603 に答える