Windows Phone应用程序的内存使用量在页面之间来回传递时会不断增加

时间:2014-05-30 05:42:36

标签: image memory-management garbage-collection windows-phone

我正在编写示例Windows Phone 8.1应用,这只是一个专辑制作者。从应用程序中,我可以从库中选择照片并将其制作成相册。

功能: -

  1. 如果我以前创建了相册,那么当我启动应用程序时,会显示每个相册的第一张图片。(让我们称之为'AllAlbumsView'
  2. 如果我点击 AllAlbumsView 中的任何图片,那么我将被带到该特定相册(让我们称之为'EditPage')并可以查看该相册的图片
  3. 如果我点击 EditPage 中的后退按钮,我将再次进入 AllAlbumsView。
  4. 现在,我面临的问题是:即使我只有一张专辑只有三张图片,如果我从 AllAlbumsView 转到编辑页面,然后通过单击后退按钮返回 AllAlbumsView 并一次又一次执行此操作,应用程序使用的内存将继续构建。

    我通过Visual Studio的内存诊断工具对此进行了调查,发现当我从 EditPage 转到 AllAlbumsView 时,内存使用情况并没有不要下去(即正在观看的专辑的图像仍在内存中)。然后,当我通过单击相册再次打开 EditPage 时,内存使用量随着图像再次加载而增加。(所以,我在内存中有多个图像副本)

    我想要的是:当我转到 EditPage 时,应该将图片加载到内存中但是当我返回 AllAlbumsView 页面时,图像应由garbage collector自动丢弃。现在,当我回到 AllAlbumsViewPage 时,garbage-collector没有清理内存中的图像

    有人可以帮忙吗?

    由于

1 个答案:

答案 0 :(得分:1)

您没有清除正在使用的对象的引用。

好的,您可以在AllAlbumsView处理程序中加载启动OnNavigatedTo页面之前执行此操作:

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
   while (NavigationService.CanGoBack)
   {
      NavigationService.RemoveBackEntry();
   }
});

所以当按下OnNavigatedTo时,你的堆栈是空的,因此没有内存占用,你可以进入下一个屏幕,然后再次返回,再次堆叠空等等......那就是它。此外,你必须确保你只是ovveriding BackKeyPress事件处理程序,不应该有新的导航。希望这有帮助。