Kiedy można złapać OutOfMemoryException i jak sobie z tym poradzić?
Wczoraj wziąłem udział w dyskusji na temat SO poświęconej OutOfMemoryException oraz zaletom i wadom jej obsługi (C # spróbuj {} catch {}).
Moje plusy za obsługę to:
Fakt, że wyjątek OutOfMemoryException został zgłoszony, nie oznacza, że stan programu został uszkodzony;Zgodnie z dokumentacją „następujące instrukcje pośrednie Microsoft (MSIL) rzutują OutOfMemoryException: box, newarr, newobj”, które po prostu (zwykle) oznaczają, że CLR próbował znaleźć blok pamięci o danym rozmiarze i nie był w stanie tego zrobić; to robinie oznacza, że żaden pojedynczy bajt nie pozostał w naszej dyspozycji;Ale nie wszyscy ludzie zgodzili się z tym i spekulowali o nieznanym stanie programu po tym wyjątku i niezdolności do zrobienia czegoś użytecznego, ponieważ wymagać to będzie jeszcze więcej pamięci.
Dlatego moje pytanie brzmi: jakie są poważne powody, aby nie obsługiwać OutOfMemoryException i natychmiast zrezygnować, gdy to nastąpi?
Edytowane: Czy uważasz, że OOME jest tak fatalny jak ExecutionEngineException?