Windows Phone 8上的内存泄漏问题

8
我正在开发一个Windows 8本地应用程序。在应用程序中来回跳转一段时间后,我的应用程序会崩溃。分析后,使用内存分析器,我发现每次从一个页面导航到另一个页面时,尽管我将列表、WebClient、字符串等所有对象设置为null,并在NavigatedFrom事件中调用GC.Collect,但内存使用量仍然会增加。
首先,我认为这可能是由于图片引起的,因此我从应用程序中删除了图片并进行了测试,但应用程序的内存使用量仍然没有改变。不知何故,GC.Collect无法工作并释放内存。
我尝试了以下措施,但不幸的是都不能释放内存,结果仍然相同:
1. 在设置新源之前将图像UriSource设置为null,然后调用gc.Collect以释放内存使用量,但似乎没有释放它。 2. 其次,我将所有对象设置为null,并调用GC.Collect(),但仍然无法从手机应用程序的内存使用量中释放空间。 3. 我还尝试使用内存分析器进行分析,但无法追踪任何东西。
我已经阅读了所有帖子并实施了建议,但GC.Collect()似乎无法释放内存。是否有任何解决此问题的方法?如何释放从一个页面导航到另一个页面时占用的内存?

1
你可能不太可能在这个问题上得到答案。试着写一个最小化的程序以重现错误,或者用性能分析器深入挖掘。 - H H
确保您对IDisposable对象使用“using”语句。 - Polyfun
删除图片后问题仍然存在,这很奇怪,因为在Windows Phone上,图片通常是泄漏的主要原因。你是如何从一个页面导航到另一个页面的?你总是使用NavigationService.Navigate还是有时使用NavigationService.GoBack?只要页面在后退堆栈中,它就会一直保留在内存中。 - Kevin Gosse
我正在使用NavigationService.Navigate从一个页面导航到另一个页面,然后返回。有没有办法显式地从内存中删除该页面? - user2728319
你找到解决方案了吗? - JTIM
1个回答

3

看起来有些东西在某个周期内阻止垃圾收集器回收对象。通常情况下,这可能是由于一些事件处理程序未被移除,从而使对象保持活动状态。

如果页面或视图模型中有任何事件,或者页面中的任何对象,请在离开页面之前在onNavigatedFrom方法中将其移除(- =)。这可能会解决问题并释放页面内存。


提供信息给Josue Yeray,我也在OnNavigatedFrom中删除了事件处理程序,但问题仍然存在。当我从一个页面导航到另一个页面时,内存使用量不断增加。 - user2728319
有什么解决方案吗?我仍然面临以下问题。 - user2728319

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接