Эффективность изменения размера изображения в C # и .NET 3.5

Я написал веб-сервис для изменения размера загруженных пользователем изображений, и все работает правильно с функциональной точки зрения, но он вызывает скачок использования ЦП при каждом его использовании. Он работает на 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;
}  

Я добавил в сервис профилировщик, и это, казалось, указывало на то, что подавляющее большинство времени тратится на саму библиотеку GDI +, и в моем коде мало что можно получить.

Вопросы: я делаю что-то явно неэффективное в своем коде здесь? Кажется, это соответствует примеру, который я видел.

Есть ли преимущества в использовании библиотек, отличных от GDI +? Тесты, которые я видел, по-видимому, показывают, что GDI + хорошо сравнивается с другими библиотеками, но я не нашел достаточно, чтобы быть уверенным.

Есть ли выгоды от использования блоков "небезопасного кода"?

Пожалуйста, дайте мне знать, если я не включил достаточное количество кода ... Я рад выложить столько, сколько просили, но не хочу быть неприятным в посте.

Ответы на вопрос(6)

Ваш ответ на вопрос