【发布时间】:2013-12-18 05:07:04
【问题描述】:
我似乎遇到了一些大的内存消耗问题。当我第一次加载包含 gridview 和 observablecollection 的 wpf 应用程序时,该应用程序的大小约为 10mb。
当我点击 gridview 中的一个项目时,它会打开另一个窗口,其中包含一个图像控件,该控件传递一个 base64 字符串,然后我将其转换为 BitmapImage
然后应用程序从 10mb 跃升至 123mb 左右。原始图像大小为 64k,但我存储的所有图像都是 base64 字符串,我将其转换回 byte[],然后转换为 BitmapImage。 是的,我的意思是这样做。
当我关闭窗口时,没有一个 ram 被释放。我什至尝试过调用 GC。
我用下面的代码把base64图片转成
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.None;
bitmapImage.StreamSource = new SIO.MemoryStream(imageBytes);
bitmapImage.EndInit();
return bitmapImage;
然后将其分配给 Image.Source
【问题讨论】:
-
这听起来像是一个分析工作。
-
如果您将 CacheOption 更改为
BimapCacheOption.OnLoad,您会发现有什么不同吗?还要检查你没有挂在imageBytes的副本上。