背景: 我有一个应用程序,页面显示几个低分辨率缩略图(一些是100 x 150,其他更大,更小)。当用户点击图像时,它会将它们带到另一个名为“ImageViewer”的页面(将图像名称存储在全局字符串中,然后使用该字符串来完成图像源)。此页面显示全分辨率图像并具有缩放选项。
问题: 当渲染3-5个全分辨率图像时(这些图像大约为38 MP),即使用户在查看后轻击,该应用程序也会因“System.OutOfMemoryException”而崩溃。
据我所知,这些图像非常大,但有一种方法可以在按下后退按钮后将它们从内存中“删除”吗?当按下后退按钮时,我尝试将图像源更改为1 x 1图像,但似乎Windows手机“记住”了渲染。
谢谢!
答案 0 :(得分:0)
我建议在代表图像的对象上调用Dispose()方法,而不是调用GC.Collect()。这将允许您更好地控制对象的内存何时释放,并且应该提高应用程序的性能。
您用于这些图像的对象类型很可能继承自.Net Bitmap类,该类包含GDI+位图。调用Dispose()方法将直接释放与GDI + Bitmap关联的基础数据。通过将关联的图像对象设置为null,您已经在执行此操作,但是在方法中,而不是在您选择的时间。有关在.Net中处理对象的更多信息,请参阅IDisposable.Dispose方法的文档。