WPF图像大小调整中的内存泄漏

WPF图像大小调整中的内存泄漏,wpf,asp.net-mvc,memory-leaks,image-resizing,Wpf,Asp.net Mvc,Memory Leaks,Image Resizing,我有以下图片调整大小和保存代码 此代码在ASP.NET MVC项目的不同线程中执行。作为 using (FileStream fs = new FileStream(file.File.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)) { BitmapDecoder decoder = BitmapDecoder.Create(fs, BitmapCreateOpt

我有以下图片调整大小和保存代码

此代码在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方法并行调用


我网站的其余部分只是使用Entity Framework进行简单的数据库访问,我怀疑这可能会导致任何内存泄漏,内存使用量高达3GB。

我尝试将其放入独立测试程序的循环中,并使用显式GC.Collect()跟踪该函数。至少在.NET4.5上,这表明该代码没有泄漏——在多次调用后,内存保持稳定

我认为您需要查看代码中的其他地方。您应该尝试使用分析>启动性能向导来分析它。。。然后选择.NET内存分配并查看内存的使用情况


为了好玩,我还尝试了.NET 3.5,但也没有遇到泄漏。

我开发了客户端WPF代码,所以我使用内置探查器或.NET内存探查器()。这些实验室我对服务器的帮助()谢谢,我会研究它,但是如果你使用WPF客户端,那么内存泄漏可能不会发生,因为WPF可能正在清除它,但是如果我在不同的线程上运行这个,那么我可能会错过一些清理。你曾经修复过这个问题吗?我也有同样的问题。加载18位MapImage使我的内存达到1GB。有没有办法只在图像显示时将其加载到内存中?没有,我在不同的iis网站上移动了所有内容,并为每100个请求设置了worker process recycle。