2016-08-24 3 views
0

私は最近、いくつかのカスタムアクティビティでワークフローデザイナーをホストするWPFアプリケーションを開発しました。 以下のシナリオでメモリ不足に遭遇しました:150以上のアクティビティを持つ古いワークフローを開き、それらをすべて変更する(ウィンドウを開き、データを変更し、ウィンドウを保存して閉じる)まで例外が発生しました。 この段階で私のアプリケーションのメモリ使用量は1.4 GBでしたので、私は解決策を探し始めました。 アプリケーションでMVVMを使用していることを知り、データとコマンドのバインディングを使用しています。ビューは、metro mahappsウィンドウで定義されたwindow.close()コマンドを使用して正しく閉じられています。WPF WF4.5リホスティングデザイナーのメモリの問題

ANTSメモリプロファイラを使用してリークの原因を調べ、アプリケーションのメモリ使用量が1.35GBのときにメモリスナップショットを作成しました。 解析後、メモリに保持されているインスタンスはSystem.Byte []型で、GCルートのパスは次のとおりです。 System.Byte [] ==> System.IO.MemoryStream ==> System.Windows.Baml2006.SharedStream = => System.Windows.Baml2006.Baml2006Reader ==> System.Windows.ResourceDictionnary ==> System.Windows.ResourceDictionnary [] ==>リスト==> ResourceDictionaryCollection ==> ResourceDictionary ==> System.Windows.Baml2006.BamlBinaryReader ==> => System.Windows.EffectiveValueEntry [] ==> MyView

本当にありがとうございます。ありがとう。

+0

オートファックまたは他のIOCコンテナを使用していますか? – helmsb

+0

いいえ、@helmsb、私はいません – Ouuss

答えて

0

この問題は、.net 4.0プロジェクトで発生しました。それまでは、ワークフローデザイナの既知の問題でした。私はこの問題が.net 4.5で解決されたと思っていましたが、おそらくこの古い解決法が何らかの使用になる可能性があります。

次のlinkは、独自のアプリケーションドメインでワークフローデザイナーをマーシャリングすることができます。したがって、AppDomain Isolated WPFアドインを使用してデザイナを読み込むことができます。

これは、再ホストされたソリューションで発生していた問題のメモリリークを確実に削除しました。