2016-08-24 102 views
0

我最近開發了一個WPF應用程序,它重新託管了一些具有一些自定義活動的工作流設計器。 在以下情況之後,我遇到了一個內存問題(Out Of Memory Exception):我打開了一個具有超過150個活動的舊工作流程,並開始修改它們(打開一個窗口,修改一些數據,保存並關閉窗口),直到發生異常。 在這個階段,我的應用程序有1.4 GB的內存使用量,所以我開始尋找解決方案。 知道我在我的應用程序中使用MVVM,我正在使用數據和命令綁定,我的視圖正確地使用metro mahapps窗口中定義的window.close()命令關閉。WPF WF4.5重新設計的設計器內存問題

我使用ANTS Memory Profiler來查找泄漏源,並且當我的應用程序內存使用量爲1.35 GB時,我使用了內存快照。 經過分析,保存在內存中的實例是System.Byte []類型,並且GC根目錄的路徑是: System.Byte [] ==> System.IO.MemoryStream ==> System.Windows.Baml2006.SharedStream = => System.Windows.Baml2006.BamlBinaryReader ==> System.Windows.Baml2006.Baml2006Reader ==> System.Windows.ResourceDictionnary ==> System.Windows.ResourceDictionnary [] ==> List ==> ResourceDictionaryCollection ==> ResourceDictionary = => System.Windows.EffectiveValueEntry [] ==> MyView

我非常感謝您的幫助。謝謝。

+0

您使用Autofac或其他IOC容器嗎? – helmsb

+0

沒有@helmsb,我不是 – Ouuss

回答

0

我遇到過.net 4.0項目的這個問題。那時這是工作流設計器的一個已知問題。我曾以爲這個問題已經在.net 4.5中解決了,但也許這個舊的解決方案可能有用。

以下link允許您將工作流設計器編組在其自己的應用程序域中。所以它有效地允許您使用AppDomain Isolated WPF加載項加載設計器。

這確實消除了我們重新託管的解決方案中發生的內存泄漏問題。