gpt4 book ai didi

c# - 压缩图像时 C# 中的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 18:20:47 31 4
gpt4 key购买 nike

我尝试用内存中的 MagickImage 压缩 ImageSource 。但是太耗内存了。使用 VS 性能工具,每次调用此方法都会消耗大量内存。它一旦存在就应该占用 0Mb,对吗?

internal static System.Windows.Media.ImageSource compressImage(System.Windows.Media.ImageSource ims)
{
using (MemoryStream stream = new MemoryStream())
{
using (MemoryStream outS = new MemoryStream())
{
BitmapSource bs = ims as BitmapSource;
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
BitmapFrame bf = BitmapFrame.Create(bs);
//encoder.Frames.Add(BitmapFrame.Create(image1.Source));
encoder.Frames.Add(bf);
encoder.Save(stream);
stream.Flush();

try
{
// Read first frame of gif image
using (MagickImage image = new MagickImage(stream))
{
image.Quality = 75;
image.Resize(new Percentage(0.65));
image.Density = new Density(200, DensityUnit.PixelsPerInch);
image.Write(outS);
}

stream.Close();
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
outS.Position = 0;
bitmap.StreamSource = outS;
//
bitmap.EndInit();
//bitmap.Freeze();
outS.Flush();
outS.Close();
ims = null;
return bitmap;
}
catch (Exception e)
{
return null;
}
}
}

}
}

最佳答案

由于图像是逐像素存储在内存中的。它会消耗多少内存取决于它的大小。指定它的大小会减少很多内存。

bitmap.DecodePizelWidth = 800;

关于c# - 压缩图像时 C# 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36885325/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com