Вчера я принял участие в обсуждении SO, посвященном OutOfMemoryException, а также за и против его обработки (С# try {} catch {}).
Мои профи для обработки:
- Тот факт, что OutOfMemoryException был брошен, обычно не означает, что состояние программы было повреждено;
- В соответствии с документацией "следующие инструкции Microsoft промежуточного (MSIL) вызывают OutOfMemoryException: box, newarr, newobj", который просто (обычно) означает, что CLR попыталась найти блок памяти определенного размера и не смогла этого сделать; это не означает, что ни один байт не остался в нашем распоряжении;
Но не все люди согласны с этим и размышляют о неизвестном состоянии программы после этого исключения и невозможности сделать что-то полезное, поскольку для этого потребуется еще больше памяти.
Поэтому мой вопрос: каковы серьезные причины не обрабатывать OutOfMemoryException и немедленно сдаваться, когда это происходит?
Отредактировано: Считаете ли вы, что OOME является столь же фатальным, как ExecutionEngineException?