我有以下圖像調整大小和保存代碼。WPF圖像調整大小的內存泄漏
此代碼在ASP.NET MVC Project中的不同線程中執行。作爲
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方法並行調用每個分辨率。
我餘下的網站很簡單簡單使用Entity Framework的數據庫訪問,我懷疑可能導致任何內存泄漏高達3GB的內存使用情況。
你有沒有得到這個修復?我有這個相同的問題。加載18 BitmapImages使我的內存達到1GB。有沒有辦法只在內存中加載圖像? – AndrewRalon
不,我將所有內容都移動到了不同的iis網站上,並且我爲每100個請求設置了工作流程回收站。 –