内存流用于位图图像增加内存使用量

时间:2016-09-05 18:33:06

标签: c# wpf

我正在使用这个函数将你的字节数组转换为图像但是当这个函数调用系统增加的内存使用时。这个函数可以调用大约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;
    }

Task Manager screen shot

1 个答案:

答案 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会有什么不同吗?