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

本文关键字:内存 增加 图像 位图 | 更新日期: 2023-09-27 18:05:40

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

任务管理器屏幕截图

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

不要这样做:

using (var mem = new MemoryStream(imageData))
{
   ...         
   mem.Dispose();
}

您已经用using关闭了memmem.Position默认为0。但这不是你的问题。

尝试添加一个后台Thread,并检查while循环上的进程内存使用情况,如果它超过x,则调用GC.Collect(),因此这个已处置的元素被释放。同样,在你完成BitmapImage的任何操作后,将其设置为null,以防万一。

image.CacheOption = BitmapCacheOption.OnLoad;

也许这一行与内存使用有关,BitmapCacheOption.Default有什么区别吗?