【问题标题】:windows phone out of memory exceptionwindows phone 内存不足异常
【发布时间】:2013-06-16 10:36:04
【问题描述】:

我正在开发 Windows Phone 应用程序。在我的应用程序中,我使用 Longlistselector 并使用 MVVM 加载带有图像的长列表。同样在列表后的详细信息页面中,高分辨率图像很少。

在我的应用程序中,我从第 1 页转到第 2 页,从第 2 页转到第 1 页 n 次。 应用程序在返回导航时崩溃,给出 ArgumentOutOfRangeException 和 OutOfMemoryException。

我已经完成了 Windows phone 应用程序分析。它显示的 GC 事件被频繁调用。但是它没有显示应用程序在什么时候崩溃以及如何减少或如何清理应用程序使用的内存。

如果有人知道内存清理以及如何防止内存泄漏,请告诉我。

【问题讨论】:

    标签: memory-leaks windows-phone-8 out-of-memory


    【解决方案1】:

    内存泄漏的最大问题是未释放事件处理程序。每当您订阅事件时,您还需要在不再需要更新时取消订阅该事件。我猜当您导航回第 1 页时,您的第 2 页实际上并没有消失。 我相信有一对重载方法(我认为是 OnNavigatingTo 和 OnNavigatingFrom)可以帮助您管理这一点。

    另一种方法是使用 Wea​​kReference 并使用 EventAggregator 手动传递任何数据。可能最容易使用的是MVVM Light Toolkit(信使)的一部分。此弱引用不会让您的事件发送者持有对您的订阅者的引用。

    【讨论】:

    • 使用内存分析我观察到第1页和第2页有多个实例。如何删除这些实例?这些实例存在于应用程序生命周期的内存中。此外,与这些实例关联的 ViewModel 也不会被收集。我如何做到这一点?
    • 这需要一些工作,但您需要仔细检查哪些对象引用了您的页面并将它们设置为 null。
    • 即离开页面时
    • 这里有一点建议:stackoverflow.com/questions/600757/…
    【解决方案2】:

    您还必须记住,windows phone 是一种新的范例。您不是从一个页面导航到另一个页面,而是导航到一个页面并返回到上一页。如果您一直在前进,您将在导航堆栈中拥有新的页面实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      相关资源
      最近更新 更多