图像调整C#和.NET 3.5的效率

Mat*_*ols 15 .net c# gdi+ resize

我已经编写了一个Web服务来调整用户上传的图像,并且从功能的角度来看,所有这些都可以正常工作,但是每次使用它都会导致CPU使用率达到峰值.它在Windows Server 2008 64位上运行.我已经尝试编译为32位和64位并得到大致相同的结果.

服务的核心是这个功能:

private Image CreateReducedImage(Image imgOrig, Size NewSize)
{
    var newBM = new Bitmap(NewSize.Width, NewSize.Height);
    using (var newGrapics = Graphics.FromImage(newBM))
    {
        newGrapics.CompositingQuality = CompositingQuality.HighSpeed;
        newGrapics.SmoothingMode = SmoothingMode.HighSpeed;
        newGrapics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        newGrapics.DrawImage(imgOrig, new Rectangle(0, 0, NewSize.Width, NewSize.Height));
    }

    return newBM;
}  
Run Code Online (Sandbox Code Playgroud)

我在服务上放了一个分析器,它似乎表明绝大部分时间花在了GDI +库本身上,而且我的代码中没有太多东西可以获得.

问题:我在这里的代码中做了一些明显低效的事情吗?它似乎符合我见过的例子.

使用除GDI +之外的库有没有收获?我看到的基准测试似乎表明GDI +与其他图书馆相比做得很好但我没有找到足够的信心.

使用"不安全的代码"块会有收获吗?

如果我没有提供足够的代码,请告诉我...我很乐意尽可能多地提出要求但不想在帖子中讨厌.

Pau*_*sik 6

图像处理通常是昂贵的操作.您必须记住,在应用程序开始任何处理之前,32位彩色图像会在内存中扩展为4*像素宽*像素高度.特别是在进行任何类型的像素处理时,绝对会出现尖峰.

话虽这么说,我唯一可以看到你能够加快处理速度或降低对处理器的影响的地方就是尝试低质量的插值模式.