【问题标题】:Memory leak on windows phone 8windows phone 8 内存泄漏
【发布时间】:2013-08-29 08:22:55
【问题描述】:

我正在开发一个 Windows 8 原生应用程序。在应用程序中来回切换一段时间后,我的应用程序崩溃了。在分析中,使用内存分析器我发现每次我从一个页面导航到另一个页面时,内存使用量都会增加,尽管我将列表、webclient、字符串等的所有对象设置为 null 并在之后调用 GC.Collect NavigatedFrom 事件。

首先我认为这是由于图像,因此我从应用程序中删除了图像并进行了测试,但应用程序的内存使用量仍然没有变化。不知何故,GC.Collect 无法正常工作并释放内存。

我已经尝试了下面提到的事情,但不幸的是我没有释放内存,而是结果保持不变。

  • 我在设置新源之前已将图像 urisource 设置为 null,然后调用 gc.Collect 释放内存使用量,但它似乎没有释放它

  • 其次,我已将所有对象设置为 null,并调用 GC.Collect() 但它仍然没有从手机应用程序的内存使用中释放空间。

  • 我也尝试使用内存分析器进行分析,但无法跟踪任何内容。

我也浏览了所有帖子并实现了建议的内容,但 GC.Collect() 似乎没有释放内存。

对于以下问题是否有任何解决方法。如何释放从一页导航到另一页时消耗的内存?

【问题讨论】:

  • 您不太可能得到答案。尝试制作一个重现错误的最小程序。或者使用分析器深入挖掘。
  • 确保您对 IDisposable 对象使用“使用”语句。
  • 很奇怪,你把图片删掉后还是有这个问题,它通常是Windows Phone上的第一大泄漏源。你是如何从一个页面导航到另一个页面的?您是一直使用NavigationService.Navigate 还是有时使用NavigationService.GoBack?只要页面在 backstack 中,它就会一直保存在内存中。
  • 我正在使用 NavigationService.Navigate 从一个页面到另一个页面并返回。有什么方法可以显式地从内存中删除页面?
  • 你有没有找到解决办法?

标签: c# memory-leaks windows-phone-8 garbage-collection out-of-memory


【解决方案1】:

似乎有些东西阻止了垃圾收集器在某个周期内回收对象。这可能是并且通常是由于某些事件处理程序没有被删除,从而使对象保持活动状态。

如果您在页面或视图模型或页面中的任何对象中有任何事件,请在退出页面之前在 onNavigatedFrom 方法中将其删除 (-=)... 这可能会解决问题,并且您的页面内存是免费....

【讨论】:

  • 供您参考 Josue Yeray,我还将删除 OnNavigatedFrom 中的事件处理程序,但问题仍然存在。当我从一个导航到另一个时,内存使用量一直在增加。
  • 有什么解决办法吗?我仍然面临以下问题
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多