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