3

弱参照と弱イベントパターンを理解しています。

弱いイベントパターンが使用される場所の1つは、コントロールとDataModel間のDataBindingです。DataBindingのプロセス中に、DataModelがINotifyPropertyChangeをサポートしている場合、コントロールはDataModelにイベントを通じて変更についてアドバイスするように要求します。弱いイベントがなければ、DataModelはコントロールにハードリファレンスを保持していました。その参照のため、ウィンドウがGCで使用可能になると同時に、コントロールをGCで使用可能としてマークすることはできませんでした。

Microsoftは、この問題を解決するために弱参照を使用することを決定しました。

提案されたもののような他の選択肢はもっと良くなかっただろうか?

代替案:DataModelへのDataBindingを削除するように要求するために、子UiElementsを渡すコードを使用してウィンドウにIDisposableを実装しますか?その解決策で何が間違っていただろうか?

4

1 に答える 1

5

弱いイベントを使用することには、基本的な利点が1つあります。それは、DataModelからコントロールをアンバインドするタスクがガベージコレクター自体に任されていることです。ガベージコレクタは通常、システムがアイドル状態のとき、またはメモリを解放する必要があるときにのみアクティブ化される優先度の低いスレッドで実行されるため、他のアクティビティの速度が低下することはありません。対照的に、IDisposableがコントロールをDataModelsから切り離すということは、コントロールを手動で破棄する場合、バインド解除は通常の呼び出し元のスレッドで行われる必要があることを意味します。

もう1つの側面(およびこれはMVCパターンによって義務付けられています)は、モデルをビューから独立させておくことです。オブジェクトの存続期間を依存関係と考える場合、バインディングを解放するためにコントロールの協力に依存する必要がないため、弱参照はモデルを独立させるために必要なものです。

于 2012-09-05T00:22:53.150 に答える