Создание эскизов с помощью ImageSharp - улучшения производительности? - PullRequest
0 голосов
/ 20 октября 2019

Я использую ImageSharp для преобразования некоторых файлов JPEG из изображений размером 4000x4000 (или около того) в набор миниатюр разных размеров (100x100, 250x250, 500x500 и т. Д.). Приведенный ниже код работает довольно хорошо, но задается вопросом о каких-либо улучшениях производительности - изменение размера и сохранение 3 миниатюр занимает около секунды на изображение, что неплохо, но мне интересно, есть ли какие-нибудь оптимизации, которые я могу сделать, чтобы сделать это быстрее?

                var sizes = new[] { new Size (100), new Size (250), new Size (500) };
                using (var image = Image.Load<Rgb24>(sourceFileName))
                {
                    foreach (var size in sizes)
                    {
                        image.Mutate(x => x.Resize(size.Width, size.Height));
                        image.Save(dest);
                    }
                }

Я знаю, что эта библиотека, вероятно, никогда не достигнет производительности GraphicsMagick (который является родным C ++ и высокооптимизированным, и может выполнять то же самое преобразование загрузки + эскиза примерно за 200 мс), но мне нравится тот факт, чтоэто кроссплатформенный.

Львиная доля времени, необходимого для выполнения работы в ImageSharp, занята загрузкой изображения - есть ли способ дать ему подсказку для более быстрой загрузки JPEG, учитывая, что большая часть разрешения будетбыть отброшены с уменьшением миниатюр в любом случае? После загрузки фактическое изменение размера и сохранение на диск кажется довольно быстрым.

Я также пытался использовать пул потоков для преобразования (скажем) 6 изображений параллельно, что дает некоторое улучшение, но я простохотите проверить, есть ли опции или изменения использования в самом ImageSharp, которые сделают это значительно быстрее - проверили документы, но ничего очевидного пока не вижу.

...