Silverlight prism / unity中的内存泄漏

时间:2011-02-01 14:48:29

标签: silverlight mvvm unity-container prism

我们正在使用SL4,PRISM和MVVM构建LOB应用程序。我最近注意到我的应用程序没有释放任何内存。如果我切换黑白页面,它开始大约150MB并且增长到1GB +非常快。我们的设计涉及3个模块,每个模块都有一个Controller类(Unity单例),它监听事件并将视图注入适当的区域。因此,当触发事件以注入视图时,这些控制器中会发生什么。

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

因此,对此视图的100次调用将超过此次100次。在addviewregion方法中,我在添加新视图之前删除所有现有视图。在看到内存问题后,我设置了视图&amp;对于需要删除的所有视图,addviewtoregion方法中的viewmodel为null。内存消耗仍然相同。 Unity ContainerControllled ......对象(我的控制器)是否包含对这些对象的引用?

1 个答案:

答案 0 :(得分:1)

您是否注册处理这些动态视图上的事件,并在删除视图之前忘记取消注册它们?处理事件会创建对对象的隐式引用,这通常是托管内存泄漏的来源。

您应该检查this guide以使用WinDbg跟踪泄漏的Silverlight控件,以检查堆和GC根。