我有一个对象集合,每个对象都包含一个 BitmapImage。我将此集合绑定(bind)到 FlipView。当用户在 FlipView 中翻页时,所选对象的 BitmapInmage 从 ApplicationData 加载,我将前一个对象的 BitmapImage 设置为 null 以释放内存。问题是,内存永远不会释放,应用程序在翻转一段时间后崩溃。当我查看集合时,只有实际项目设置了 BitmapImage,所有其他项目都将其设置为 null。那么如何解除内存呢?
我加载图片的方式:
StorageFile s = await ApplicationData.Current.LocalFolder.GetFileAsync(localFilename);
BitmapImage bitmapImage = new BitmapImage();
using (var stream = await s.OpenAsync(FileAccessMode.Read))
{
bitmapImage.SetSource(stream);
}
return bitmapImage;
编辑:我认为问题可能出在我加载图像的方式上,我猜文件流没有被释放
请您参考如下方法:
我遇到了与 Windows Phone 7 应用程序类似的问题。
对我有用的一个技巧是从父元素中删除图像。
grid1.Children.Remove(image1);
image1 = null;
不过我不确定这对您的情况是否有帮助。
有关此问题的更多详细信息来 self 的 blog post .
