【发布时间】: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