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