Время от времени я обнаруживаю, что делаю что-то в меру глупое, в результате чего моя программа распределяет всю память, которую она может получить, а затем немного.
Подобные вещи раньше вызывали довольно быстрое прекращение работы программы с ошибкой «нехватки памяти», но в наши дни Windows изо всех сил старается передать эту несуществующую память приложению, и фактически видимо, готов совершить самоубийство. Конечно, не буквально, но он будет так сильно голодать из-за используемой физической оперативной памяти, что даже для запуска диспетчера задач потребуется полчаса подкачки (после того, как запущенное приложение все еще выделяет все больше и больше памяти).
Это случается не слишком часто, но когда это происходит, это губительно. Обычно мне приходится перезагружать компьютер, что время от времени приводит к потере данных и, как правило, к большим неудобствам.
У вас есть практический совет, как сделать последствия такой ошибки менее страшными? Возможно, некоторые настройки реестра ограничивают максимальный объем виртуальной памяти, который приложение может выделить? Или какой-нибудь флаг CLR, который ограничит это только для текущего приложения? (Обычно в .NET я делаю это для себя.)
( «Не хватает ОЗУ» и «Покупайте больше ОЗУ» бесполезны - первый я не могу контролировать, а второй я уже сделал.)