应用加载阶段和内存泄漏搜索

时间:2013-10-03 22:36:10

标签: xaml windows-phone-7 memory-leaks

我还在与内存泄漏作斗争。使用改进的MemoryDiagnosticsHelper,我增加了制作数据广播以查看即时内存消耗的可能性。

问题从完整的应用程序开始:我有一个包含3个项目的轴,其中2个包含10-20个对象的列表(可以跳转到项目详细信息)。内存诊断显示,它消耗大约50Mb的内存。跳转到详细页面并返回枢轴后,内存消耗很容易增加到70Mb。

首先,我将列表移动到单独的应用程序。没有风格,需要15 Mbs。我还没检查,但我认为,在枢轴中的2个列表大约需要20Mbs,因为dll已经加载了。

所以,我决定深入到app加载阶段。

  • 在InitializePhoneApplication()中,需要7 Mb。
  • 在CompleteInitializePhoneApplication()中,它使用空的ViewModelLocator需要8.5 Mb,或者使用所有视图模型需要10.5 Mb。相当大,但我有30-40个数据服务和40-50个视图模型。所以,如果它不再成长,我会觉得自己很好。
  • 在第一页的OnNavigatedTo()中,它与所有VM几乎相同,有点10.7 Mb,没关系。
  • ???
  • 没有利润。说真的,接下来会发生什么?我不知道,接下来到底发生了什么,但MemoryDiagnosticsHelper说,内存消耗量跃升至30 Mbs。为什么?所有dll和VM都已加载。我只是加载一个非常空白的页面,完全是白色。

Profiler(当然在发布模式下运行)也很无奈。它只显示内存消耗的增长,但它发生在非托管内存中。它真的很烦人。

enter image description here

好的,让我们更清楚地提问。当app初始化(传递初始化,加载和附加viewmodel,页面传递OnNavigatedTo())时接下来会发生什么?

编辑1:在夜晚,我明白了,我的应用程序中唯一的弱部分(至少是主要细节页面)是MVVMLight的EventToCommand。谷歌的第一篇文章几乎是http://atomaras.wordpress.com/2012/04/23/solving-mvvmlights-eventtocommand-memory-leak-wp7/任何人都知道,如果这是一个很容易修复的吗?我检查了MvvmLight的博客,看起来Laurent正在开发安装程序。这让我想到了,这个泄漏应该已经解决了,不是吗?

编辑2:我看到2个泄漏问题的解决方案:要么使用上面链接中的修复,要么从代码隐藏中调用命令。或者使用另一个MVVM库。

1 个答案:

答案 0 :(得分:0)

参考。

我希望在app init的第一阶段加载更加流畅。此外,现在很清楚,为什么分析器说内存中没有那么多托管代码。