OutofMemoryException - загрузка чрезвычайно больших изображений - PullRequest
6 голосов
/ 24 августа 2010

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

Вот простая программа для демонстрации проблемы:

static void Main(string[] args)
{
    string largeimage = @"C:\Temp\test_image.jpg"; // 14473x25684

    Image i = Bitmap.FromFile(largeimage); // OutofMemoryException was unhandled
}

Теперь я понимаю, что проблема не в том, сколько у меня физической памяти, а в ограничении адресации. Что я могу сделать, чтобы обойти это ограничение?

Изображение действительно допустимо и прекрасно открывается в Photoshop (размер виртуальной машины: 916 МБ) и ACDSee. Также не беспокойтесь о Google размеры, так как указанные размеры не являются точными. :)

Спасибо, что уделили время.

Ответы [ 2 ]

4 голосов
/ 24 августа 2010

Класс Bitmap потребует около 1,5 ГБ памяти для хранения этого экземпляра.Распределитель памяти .NET обычно дросселирует отметку 1 ГБ.

0 голосов
/ 24 августа 2010

ОС не может выделять непрерывный объем памяти.Все, что вы можете с этим поделать, - это использовать MemoryFailPoint и перехватывать InsufficientMemoryException.Но это только избавит вас от сбоя приложения.
Что касается меня, чтобы открыть такой большой файл, вы должны использовать бинарный ридер и нарисовать файл с помощью System.Drawing.

вот хороший вопрос и ответы Когда можно поймать исключение OutOfMemoryException и как его обработать?

...