Наш веб-сервер должен обработать множество композиций больших изображений перед отправкой результатов веб-клиентам. Этот процесс критически важен для производительности, поскольку сервер может получать несколько тысяч запросов в час.
Прямо сейчас наше решение загружает файлы PNG (размером около 1 МБ каждый )с жесткого диска и отправляет их на видеокарту, чтобы композиция выполнялась на графическом процессоре. Сначала мы попытались загрузить наши изображения с помощью декодера PNG, предоставляемого XNA API. Мы видели, что производительность была не слишком хорошей.
Чтобы понять, связана ли проблема с загрузкой с HD или декодированием PNG, мы изменили это, загрузив файл в поток памяти, а затем отправив этот поток памяти в декодер.NET PNG. Разница в производительности при использовании XNA или при использовании класса System.Windows.Media.Imaging.PngBitmapDecoder незначительна. Мы получаем примерно одинаковые уровни производительности.
Наши тесты показывают следующие результаты производительности:
Всего :3680,50 мс 100%
Из этих результатов мы видим, что самые медленные участки — это декодирование PNG.
Поэтому нам интересно, не будет ли декодера PNG, который мы могли бы использовать, что позволило бы нам сократить время декодирования PNG. Мы также рассмотрели возможность хранения изображений на жестком диске в несжатом виде.но тогда каждое изображение будет иметь размер 10 МБ вместо 1 МБ, а поскольку на жестком диске хранится несколько десятков тысяч этих изображений, хранить их все без сжатия невозможно.
РЕДАКТИРОВАТЬ :Дополнительная полезная информация: