我正在使用这个函数将你的字节数组转换为图像但是当这个函数调用系统增加的内存使用时。这个函数可以调用大约500次。我试图处理或刷新以使内存为空但是使用仍然没有我正在附加一个显示内存使用情况的任务管理器映像。
public static BitmapImage ConvertToBitmapImage(byte[] imageData)
{
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageData))
{
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
mem.Flush();
mem.Dispose();
}
image.Freeze();
return image;
}
答案 0 :(得分:0)
不要这样做:
using (var mem = new MemoryStream(imageData))
{
...
mem.Dispose();
}
您已使用mem
关闭using
。此外,mem.Position
默认情况下应为0
。但这不是你的问题。
尝试添加背景Thread
并检查while
循环上的进程内存使用情况,如果超过x
,则调用GC.Collect()
,以便释放此Disposed元素。在您使用BitmapImage
做任何事情之后,为了以防万一,将其设置为null。
image.CacheOption = BitmapCacheOption.OnLoad;
也许这一行与内存使用有关,BitmapCacheOption.Default
会有什么不同吗?