0

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

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

起初,我将列表移动到单独的应用程序。如果没有样式,则需要 15 Mbs。我还没有检查,但我认为,pivot 中的 2 个列表大约需要 20Mbs,因为 dll 已经加载。

所以,我决定深入应用程序加载阶段。

  • 在 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(当然是在发布模式下运行),也很无奈。它只是显示内存消耗的增长,但它发生在非托管内存中。真的很烦

在此处输入图像描述

好的,让问题更干净。接下来会发生什么,当应用程序初始化时(通过初始化,加载和附加视图模型,页面通过 OnNavigatedTo())?

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

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

4

1 回答 1

0

参考。

我希望它们在应用程序初始化的第一阶段加载更顺畅。另外,现在很清楚,为什么分析器说内存中没有那么多托管代码。

于 2013-10-04T11:05:40.667 回答