2013-07-15 12 views
8

WPF MVVMビジネスアプリケーションフレームワークの構築を計画していましたが、WPFプラットフォームでメモリリークに関するリサーチを行う際に多くの記事がありました。バック2007年と2008年にまだWPF 4に存在するメモリリーク

A memory leak may occur when you use data binding in Windows Presentation Foundation
Avoiding a WPF memory leak with DataBinding (Black Magic)
Serious Memory Leaks Plague WPF
Top 5 Memory leaks in WPF and Silverlight
WPF Binding Bug leads to possible Memory Issues

しかし、日付それらのほとんどは解決しているではないされたそれらのどのように私は思っていました。

言い換えれば、フレームワークを構築したり、一般的に見ているとき(WPF 4.0、.NET 4.0)に考えられるメモリリークの原因は何ですか?

編集:私はより具体的にしようとします。 WeakEventManagerとそのサブクラスを利用して、独自のソリューションを開発することなくイベントを監視することはできますか?

編集2:さらに詳細です。 WeakEventManagerを使用して、一般的なWPFだけでなく.NETのイベントによって引き起こされるメモリリークの問題を解決できますか?もしそうなら、それはなぜWPF名前空間の一部であり、一般的な.NET名前空間ではないのですか?私の心に来る

+4

いくつかの特定のリンクを追加できますか?イベント参照に関する誤解は、間違った「メモリリーク」レポートの一般的な原因でした。弱いイベントを開始として探します。 – Govert

+0

@Govertリンクをいくつか追加しました。 –

+0

私はこの質問を閉じるために誰かがなぜ投票するのか、どういう条件がそれを違反しているのか、それとも一般的に間違っているのか疑問に思っています。 –

答えて

8

まず:

  • System.Windows.Interactivity.BehaviorはSystem.Windows.Interactivity.dllから:あなたにおよびその逆にそれを期待していたときに動作が追加されたイベントを残して、切り離しない場合がありますただ、you'llは、将来的には、サードパーティ製コンポーネントを使用することかなり確信してあなたの説明 - 私によってGC
  • を生き残るために管理上のハンドラ、私たちは、これがリーク
ためのファーストクラスの候補であることが判明しました

開始前にこれを検討しているという事実は、ap lus、良いMemoryProfilerに投資し、定期的に最初からあなたのアプリをプロファイリングしてください。あなたはうまくいくでしょう。

編集:編集内容にコメントするには:

  • 実装INotifyPropertyChangedのが必須である:あなたのリンクを介して確認し、私は次の3つの主要トピックを隔離することができると思います。最初の開発者は、「静的なビューのみで、データはモデル上で変更されず、INPCをスキップしたばかりです」と言って、公開して四分の一にする必要があります。さらに優れたフレームワークでは、このインターフェイスの実装を強制するか、または少なくとも開発者がインターフェイスを使用するのを可能な限り簡単にする必要があります。
  • PropertyDescriptorsにはバインドしないでください。最初は明白ではないかもしれませんが、Frameworkはカスタムビューモデルプロパティにバインドするためにのみ使用する開発者のパスを設定します。
  • は、必ずコード衛生弱いイベントに関するあなたの編集については

の質問は、はい、これはうまくいくかもしれないより私の意見では、あなたのEventHandlerを、登録解除します。個人的には、登録しているイベントを公開しているモデルが予想よりも早くクリーンアップされる状況につながる可能性があるので、この優れた方法は個人的には考慮しません。私は余分なマイルを歩くことを提案し、意識的にあなたのハンドラを登録解除します。

+0

+1サードパーティの洞察力。時間があれば、これらのコンポーネントでmlを分離して検出する方法で答えを見つけ出すことに感謝します。私はそれが多くの人々によって共有される問題だと推測しています –

+0

+1行動漏れ*(もう1つのリーク私は知りませんでした)*。私はあなたの提案を検討しますが、元の質問を少し編集したので、あなたの答えを再検討してください。ありがとうございました。 –

+0

Re:Behaviors ... AssociatedObjectから安全に切り離すために[このガイド](http://dotnetbyexample.blogspot.com/2011/04/safe-event-detachment-pattern-for.html)に従ってください – Thelonias

関連する問題