如何解决wp7中的内存泄漏问题

时间:2013-05-07 05:49:51

标签: windows-phone-7

我正在为Windows Phone 7开发Silverlight中的一个应用程序。我陷入了Windows手机应用程序中常见的问题,但无法以任何方式摆脱它。从第一页到第二页,第二页到第一页等导航过程中会出现内存泄漏问题,等等多次出现。

要解决这个问题,我创建了一个有2个空白页面的新项目。每页有2个文本块用于打印当前内存和峰值内存,还有一个按钮用于移动到下一页或上一页。当从第1页导航到第2页时,我对所有3个内容进行null referance并调用gc.collect来销毁页面referance。同样的,当从第2页移到第1页时,我也会做同样的事情。

我还尝试在计时器中每500毫秒调用gc.collect(),但仍然没有结果。如果我完全删除gc.collect(),内存增加MB,所以我认为这是必须的。

1 个答案:

答案 0 :(得分:3)

你做错了。如果您继续从第1页导航到第2页再到第1页,那么您将把所有以前的页面实例保留在导航堆栈中。这对你所指出的内存管理问题很不利,但它也很糟糕,因为用户在退出应用程序之前必须按下后退按钮很多次(实际上,我甚至不确定它是否会过去通过市场认证)。

导航到第2页后,如果您要转到第1页,则需要拨打NavigationService.GoBack而不是NavigationService.Navigate。它将恢复先前缓存的第1页的实例(显然你不能使该页面上的引用无效)。

在某些罕见情况下,您可能真的想要导航到第1页的新实例而不是之前的实例。在这种情况下,请调用NavigationService.RemoveBackEntry从导航堆栈中删除最新的缓存页面(您可以多次调用以清除整个堆栈)。

相关问题