2016-12-30 10 views
1

Я пытаюсь загрузить изображения с диска (размеры от 30 до 50 МБ каждый) в списке следующим образомSystem.OutOfMemoryException при загрузке нескольких больших изображений с диска

var images = new List<Image>(); 
    foreach (var imgPath in paths) 
    { 
     var img = Image.FromFile(imgPath); 
     images.Add(img); 
    } 

Проблема заключается в том, что после первого или второго изображение я получаю

System.OutOfMemoryException

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

Я попытался изменить maxRequestLength на "10000000", но это было бесполезно.

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

Есть ли способ увеличить доступную память для работы или что-то в этом роде?

P.S. Я использую формат JPG для изображений.

+1

Вы уверены, что это после _ "первого или второго изображения" _? _ «От 30 до 50 МБ каждый» - это крошечный. Глядя на Google Chome прямо сейчас, когда я печатаю это, он использует ** 129 МБ ** для сравнения. Вы пытались запустить инструменты для утечки памяти в VS? – MickyD

+2

Что означает 'maxRequestLength' для _ _ загрузки изображений с диска? _? – MickyD

+0

Слишком много переменных при игре, чтобы легко помочь вам, например, аппаратная конфигурация, ОС, тип приложения, конфигурация приложения. Очевидно, вам нужно увеличить объем памяти, доступный вашему приложению, но очень сложно сказать, как это сделать. –

ответ

0

Я не рекомендую использовать:

Image.FromFile(path); 

Это медленно и будет раздуваться ваш процесс Вместо:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read); 
var photo = Image.FromStream(fs, true, false); 

Не забудьте утилизировать ;-)

В принципе, вместо объединить все эти данные в память за один раз и убить приложение и всех ваших близких. Вы управляете изображением, как если бы это был поток данных.

Редактировать

В любом случае я не рекомендую редактирования всех изображений сразу. Вы, вероятно, получите исключение OutOfMemoryException в любом случае.

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

 Смежные вопросы

  • Нет связанных вопросов^_^