2016-09-27 38 views
0

Я борюсь с библиотекой Magick.NET, так как при преобразовании файлов изображений в pdf мое использование памяти составляет более 4 ГБ, а использование ЦП на 100%. Когда выполняется преобразование, все возвращается к норме. но поскольку я использую эту конкретную третью сторону во многих случаях одного приложения, она вызывает огромную потерю памяти.Magick.NET C# - огромное использование памяти

Проблема существует в строке images.Write (newPdfPath);

using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(orginalImage); 

      images.Write(newPdfPath); 
     } 

Изображения имеют разные размеры, и это действительно не имеет значения, насколько велика, так как при преобразовании JPG размером 7 KB проблема тоже существует.

Пожалуйста, помогите !!!!

+1

Насколько велики изображения? Возможно, [это] (http://stackoverflow.com/questions/34737302/memory-consumption-in-magick-net) может дать вам объяснение. –

+0

Как мы можем помочь с такой небольшой информацией? – TaW

+0

напишите код, в котором вы обрабатываете изображения. – raven

ответ

1

Распределение CPU и памяти не связано с размером изображения на вашем жестком диске. Это полностью связано с количеством пикселей, которые у вас есть. если у вас полностью белое изображение размером 20 000 пикселей на 20 000 пикселей, размер этого файла на вашем жестком диске может быть 6 МГ, но когда вы загрузите его в память с помощью Magick.net, он будет гигабайтом. Поэтому сначала вы должны увидеть, какой размер (в пикселях) - это изображения, и тогда мы можем судить о производительности. Затем вы можете использовать эти подходы для повышения производительности:

После загрузки изображения в память вы можете записать его на жесткий диск с форматом .mpc, а затем вы можете загрузить его в память очень быстро. (Если вам нужно загрузить пару раз ваши изображения)

Использование Magikc.net q8 вместо Q16

, если вы можете выполнить команду на параллельном цикле, то Magick.net версия 7 может работать почти в 4 раза быстрее ,

, а в качестве другого ответа говорится, что вы должны распоряжаться своим изображением, когда это было сделано.

0

Если вы конвертируете изображения в цикле, то удаление каждого изображения после завершения преобразования может помочь. Используйте

Image.Dispose(); 

метод, чтобы освободить неуправляемые ресурсы памяти, используемые изображениями.

+0

Устранение не требуется для 'изображений'. 'images'variable объявляется в операторе' using', который будет вызывать 'Dispose' в конце инструкции' use'. –

+0

Будет вызывать Dispose(), но это не значит, что он будет удален в этот момент. – BrightShadow