Здесь можно найти одно из лучших объяснений того, чего нет.
https://blogs.msdn.microsoft.com/ericlippert/2009/06/08/out-of-memory-does-not-refer-to-physical-memory/
Основная идея заключается в том, что в современных ОС Windows компьютер взорвется и умретдо того, как закончится память.Потребуется каждый байт жесткого диска, и он будет меняться так сильно, что вы заметите ужасные замедления задолго до того, как на самом деле закончится память.
Итак, что такое «OutOfMemoryException» и почему они происходят?Ну, есть несколько причин, в некоторой степени связанных с памятью, и некоторые причины, которые вообще не имеют ничего общего с памятью.
Самый распространенный источник этой ошибки: GDI + вызывает с неверными параметрами.Любая ошибка из GDI +, включая использование библиотек System.Drawing, вызывает исключение OutOfMemoryException.Похоже, это связано с тем, что базовый API не предоставляет никакой информации .NET о том, почему он вышел из строя, поэтому создатели .NET решили назвать их все OutofMemoryException, и теперь они придерживаются его для совместимости.Такие вещи, как попытка создать перо 0 размера или растровое изображение с ошибочными флагами, приводят к «Out of Memory»
. Причина, по которой .NET, возможно, использовала OutOfMemory для ошибок GDI, состоит в том, что на самом деле многие ошибкинесколько связанных с памятью.Все еще доступно ограниченное количество дескрипторов GDI.Это может быть пара миллионов, но все же ограничено, поэтому, если что-то просачивается в базовый HBITMAP или HBRUSH или HPEN, в конце концов он заканчивается, GDI вызывает сбой, и вы получаете исключение.
Другое место, где я 'Я видел ошибку, используя любой интерфейс COM.Если COM-объект возвращает ошибку, вы можете получить исключение OutOfMemory.Я пытаюсь отловить и обработать эти ошибки.
Для отслеживания просмотрите вызовы, связанные с GDI / System.Drawing.Посмотрите на трассировку стека, она показывает вам проблему.
Кроме того, не думайте, что ошибка «OutOfMemory» должна закрыть приложение.Вы должны быть в состоянии нормально восстановиться после этих исключений, потому что у вас на самом деле не хватает памяти.Почему клиент даже видит эту ошибку?