2011-02-01 78 views
1

我們正在使用SL4,PRISM和MVVM構建LOB應用程序。我最近注意到我的應用程序沒有釋放任何內存。如果我切換黑白頁面,它開始大約150MB,增長到1 GB +非常快。我們的設計涉及3個模塊,每個模塊都有一個控制器類(Unity單例),它監聽事件並將視圖注入適當的區域。所以當事件觸發注入視圖時,這是控制器中發生的事情。silverlight棱鏡/統一內存泄漏

var v = Container.resolve<view>() 
var vm = Container.resolve<viewmodel>() 
v.datacontext = vm; 
myregion.addtoregion(v); 

因此100個這個視圖的調用將會優化100次。在addviewregion方法中,我將在添加新視圖之前刪除所有現有視圖。在看到內存問題後,我將addviewtoregion方法中的viewmodel視圖設置爲null,以便刪除所有視圖。仍然消耗內存是相同的。 Unity ContainerControllled ...對象(我的控制器)持有對這些對象的引用嗎?

回答

1

您是否註冊處理這些動態視圖上的事件,並在刪除視圖之前忘記註銷它們?處理事件會創建對該對象的隱式引用,這通常是託管內存泄漏的來源。

您應該查看this guide以使用WinDbg來檢查泄漏的Silverlight控件來檢查堆和GC根。

+0

這是一個可能的原因。您應該對事件聚合器事件使用弱事件處理 – 2011-02-01 20:16:01