Skip to main content
 首页 » 编程设计

c#之将 BitmapImage 设置为 null 时内存未释放

2024年01月01日4052php

我有一个对象集合,每个对象都包含一个 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 .