Из исключения Памяти в Системе. Рисование. Изображение. FromFile ()

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

41
задан dooburt 10 July 2009 в 09:27
поделиться

3 ответа

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

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

41
ответ дан 27 November 2019 в 00:27
поделиться

Если это не плохой файл изображения, а на самом деле обычная проблема с Image.FromFile при этом дескрипторы файлов остаются открытыми, тогда решение заключается в использовании вместо этого Image.FromStream .

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
   using (Image original = Image.FromStream(fs))
   {
      ...

Использование явного Dispose () , оператора using () или установка значения null в битовой карте не решает проблему с Image.FromFile .

Итак, если у вас приложение работает какое-то время и открывает много файлов, подумайте об использовании вместо него Image.FromStream () .

33
ответ дан 27 November 2019 в 00:27
поделиться

Также вы можете открыть его в режиме чтения (если вы хотите использовать его в двух местах одновременно)

 public Image OpenImage(string previewFile)
        {
            FileStream fs = new FileStream(previewFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            return Image.FromStream(fs);
        }
3
ответ дан 27 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: