2010-04-02 3 views
2

Я пытаюсь загрузить около 600 небольших изображений в память. Размер каждого файла изображения меньше 2 КБ (20 х 30). Таким образом, для всех изображений требуется не более 5 МБ в памяти, даже с дополнительной информацией о размере, формате и т. Д. Но после 400-го изображения Image.FromFile() выдает исключение OutOfMemory.Исключение OutOfMemory при загрузке нескольких небольших изображений

Итак, в чем проблема?

+0

Можете ли вы «удалить» старые изображения? – SLaks

+0

Не могли бы вы показать какой-то код о том, как вы их загружаете? –

+0

Нет, я не могу распоряжаться старыми изображениями. Моя цель - кэшировать изображения в памяти. Вот код, который я использую для загрузки фотографий: patterns.Add (новый KeyValuePair (Path.GetFileName (файл) [0], Image.FromFile (имя файла))); –

ответ

5

OutOfMemoryException является немного неправильным, когда вы имеете дело с методом Image.FromFile. Метод FromFile будет вызывать OutOfMemoryException в некоторых случаях, когда на самом деле ситуация не в памяти. А именно

  • Файл не имеет допустимый формат изображения
  • GDI + не поддерживает формат пикселя

Документация: http://msdn.microsoft.com/en-us/library/stf701f5.aspx

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

+0

Большое спасибо! Это моя вина. Я забыл о файле thumbs.db. –

0

Это не ясно, что вы работаете с, так что я собираюсь принять удар здесь ...

Имейте в виду, что если вы загружаете сжатых изображений, есть также накладные расходы памяти при распаковке эти. Как вам хорошо известно, JPG на 2 КБ будет намного больше, чем BMP. Работая с этими изображениями и думая о требованиях к памяти, подумайте о требованиях, как если бы они были BMP, а не JPG. Затем, вместо 600x2KB (менее 2 МБ), у вас действительно есть 600x100KB (60MB), PLUS некоторые из других накладных расходов, которые могут быть очень значительными (в зависимости от сбора мусора и при размещении объектов накладные расходы могут быть 2- 3x - 60 МБ).