Как устранить OutOfMemoryException?

119
31 июля 2019, 01:50

Произошло падение от OutOfMemoryException.

Как понять в чем проблема? Хочу разобраться какие вообще могут быть варианты, как их подтвердить и устранить. Прошу поправить если мои предположения не верны и дополнить полезной информацией.

Читал о таких ситуациях:

1) Отсутствует требуемый непрерывный объем памяти. При этом свободной памяти еще может быть много, просто она фрагментирована.

Способ определить: если не одна из последующих ситуаций не выявлена.

Решение: ?(похоже что этим занимается CLR)

2) Физически не достаточно памяти для данной программы и программа написана не оптимально.

Способ определить: Предположил что можно определить физический недостаток памяти посмотрев на монитор ресурсов(к примеру если нагрузка >90% - не достаточно памяти). Предположил что можно определить проблемы с производительностью с помощью дампа с кучей(хотя как это делать еще не знаю) или если знать узкие места системы.

Решение: если узких мест не знаем - ждать второго падения и собирать дамп(какой инструмент порекомендуете для прод среды?), после менять код(оптимизировать, высвобождать неуправляемые ресурсы с помощью Dispose в проблемных местах)

3) Физически не достаточно памяти для данной программы и программа написана оптимально.

Способ определить: из пункта 2.

Решение: маcштабировать сервера.

4) Переполнение StringBuilder.

Способ определить: проследить за местами их использования StringBuilder.

Решение: использовать конструктор StringBuilder() или менять логику программы.

5) Ограничение 32-bit only 2GB per object.

Способ определить: Посмотреть диспетчером задач к примеру что x32 и что обьем памяти близок к 2GB. (Тут имеет значение битность OS или только сборка?)

Решение: делать сборку 64-bit, или если это возможно поставить в app.config настройку gcAllowVeryLargeObjects enabled="true".

READ ALSO
C# список generics

C# список generics

помогите пожалуйста разобраться с Generics

145
Вывод текста в кодировке сp866 в richtextbox

Вывод текста в кодировке сp866 в richtextbox

Получаю файл текстовый файл в кодировке 866, необходимо вывести текст файла в richtextbox

124
Как отследить нажатие на sprite?

Как отследить нажатие на sprite?

Я могу узнать куда нажал пользователь:

120
В студии wpf (C#) не видны имена объектов

В студии wpf (C#) не видны имена объектов

В последнее время часто стало необходимо создавать некоторые формы в WPF и сталкиваюсь постоянно с одной и той же проблемойПосле задания имен...

133