Windows phone 7 如何解决wp7中的内存泄漏

Windows phone 7 如何解决wp7中的内存泄漏,windows-phone-7,Windows Phone 7,我正在用Silverlight为windows phone 7开发一个应用程序。我被困在windows phone应用程序中的常见问题中,但无法以任何方式摆脱它。在多次从第一页导航到第二页、从第二页导航到第一页等过程中,会出现内存泄漏问题 为了解决这个问题,我创建了一个有两个空白页的新项目。每页有两个文本块,用于打印当前内存和峰值内存,还有一个按钮用于移动到下一页或上一页。当从第1页导航到第2页时,我对所有3个东西进行空引用,并调用gc.collect来销毁页面引用。同样,当从第2页转到第1页时

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

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


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

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

导航到第2页后,如果要转到第1页,则需要调用
导航服务.GoBack
而不是
导航服务.Navigate
。它将恢复先前缓存的第1页实例(因此显然您不能使该页上的引用为空)


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

代码是一件很棒的事情……我不知道如何导航,但据我所知,框架将页面保存在内存中以支持反向导航。实际上,在应用程序中导航到页面的新实例是我的要求,在每个页面上,我都使用“NavigationService.RemoveBackEntry”,但仍然没有得到期望的结果。我的要求是在导航到另一个页面之前完全清理上一个页面,因为我应用程序中的每个页面都在当前内存堆栈中添加了太多内存,然后超过了140 MB。这就是我需要清理上一页内存的原因。@ashish123
RemoveBackEntry
应该足以从内存中删除上一页。如果没有,那就意味着你有另一种内存泄漏。你是在第1页动态加载图片还是类似的东西?@KooKiz,这就是他所需要的。非常有用的帖子+1@ashish123您是否在其中一个页面的条目中添加了任何事件?甚至在页面中的对象上?如果您这样做了,并且没有注销它,它会将该页完全保留在内存中。@Vitalivasylenko如果您从Backback中删除了一页,则应该将其收集,是的