我正在编写示例Windows Phone 8.1应用,这只是一个专辑制作者。从应用程序中,我可以从库中选择照片并将其制作成相册。
功能: -
现在,我面临的问题是:即使我只有一张专辑只有三张图片,如果我从 AllAlbumsView 转到编辑页面,然后通过单击后退按钮返回 AllAlbumsView 并一次又一次执行此操作,应用程序使用的内存将继续构建。
我通过Visual Studio的内存诊断工具对此进行了调查,发现当我从 EditPage 转到 AllAlbumsView 时,内存使用情况并没有不要下去(即正在观看的专辑的图像仍在内存中)。然后,当我通过单击相册再次打开 EditPage 时,内存使用量随着图像再次加载而增加。(所以,我在内存中有多个图像副本)
我想要的是:当我转到 EditPage 时,应该将图片加载到内存中但是当我返回 AllAlbumsView 页面时,图像应由garbage collector
自动丢弃。现在,当我回到 AllAlbumsViewPage 时,garbage-collector
没有清理内存中的图像
有人可以帮忙吗?
由于
答案 0 :(得分:1)
您没有清除正在使用的对象的引用。
好的,您可以在AllAlbumsView
处理程序中加载启动OnNavigatedTo
页面之前执行此操作:
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
while (NavigationService.CanGoBack)
{
NavigationService.RemoveBackEntry();
}
});
所以当按下OnNavigatedTo
时,你的堆栈是空的,因此没有内存占用,你可以进入下一个屏幕,然后再次返回,再次堆叠空等等......那就是它。此外,你必须确保你只是ovveriding BackKeyPress
事件处理程序,不应该有新的导航。希望这有帮助。