0

背景:我有一个应用程序,其页面显示几个低分辨率缩略图(有些是 100 x 150,有些更大,更小)。当用户点击图像时,它会将他们带到另一个名为“ImageViewer”的页面(将图像名称存储在全局字符串中,然后使用该字符串完成图像的来源)。此页面显示全分辨率图像并具有缩放选项。

问题:当渲染 3-5 个全分辨率图像(这些图像大约为 38 MP)时,即使用户在查看后点击返回,应用程序也会因“System.OutOfMemoryException”而崩溃。

我知道这些图像非常大,但是有没有办法在按下后退按钮后将它们从内存中“删除”?当按下后退按钮时,我尝试将图像源更改为 1 x 1 图像,但似乎 windows phone “记住”了渲染。

谢谢!

4

1 回答 1

0

我建议不要调用 GC.Collect(),而是对代表图像的对象调用Dispose()方法。这将允许您更好地控制对象的内存何时被释放,并且应该提高您的应用程序的性能。

您用于这些图像的对象类型很可能继承自 .Net Bitmap类,该类环绕GDI+位图。调用 Dispose() 方法将直接释放与 GDI+ 位图关联的基础数据。通过将关联的图像对象设置为 null,您已经在执行此操作,但在循环方法中,而不是在您选择的时间。有关在 .Net 中处理对象的更多信息,请参阅IDisposable.Dispose方法的文档。

于 2013-08-15T01:45:07.273 回答