我有以下图像调整大小并保存代码。
此代码在 ASP.NET MVC 项目的不同线程中执行。作为
using (FileStream fs = new FileStream(file.File.FullName,
FileMode.Open, FileAccess.Read, FileShare.Read))
{
BitmapDecoder decoder = BitmapDecoder.Create(fs,
BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
var img = decoder.Frames[0];
img.Freeze();
double width = Size;
double height = Size;
if (img.PixelWidth > img.PixelHeight)
{
height = (int)(((double)img.PixelHeight / (double)img.PixelWidth)
* (double)width);
}
else
{
width = (int)(((double)img.PixelWidth / (double)img.PixelHeight)
* (double)height);
}
var target = new TransformedBitmap(img,
new ScaleTransform(width / (double)img.PixelWidth, height
/ (double)img.PixelHeight, 0, 0));
RenderOptions.SetBitmapScalingMode(target, BitmapScalingMode.HighQuality);
var t = BitmapFrame.Create(target);
RenderOptions.SetBitmapScalingMode(t, BitmapScalingMode.HighQuality);
target.Freeze();
t.Freeze();
JpegBitmapEncoder enc = new JpegBitmapEncoder();
enc.Frames.Add(t);
enc.QualityLevel = 90;
using (FileStream fsout = saved.File.OpenWrite())
{
enc.Save(fsout);
}
}
我已经使用了每个 IDisposable 对象,WPF 对象不实现 IDisposable 所以我不能手动处理它们。
我在某处读到调用 Freeze 将防止内存泄漏,但即使在此之后,也没有任何改善。此进程的内存使用量不断增加。
我需要的是,当上传图像时,它必须以 4 种不同的分辨率调整大小,150x150、350x350、700x700 和 1000x1000,这些分辨率中的每一个都是使用 Parallel.ForEach 方法并行调用的。
我的网站的其余部分只是使用实体框架进行简单的数据库访问,我怀疑这会导致任何高达 3GB 内存使用的内存泄漏。