GC.Collect call и OutOfMemory - PullRequest
       12

GC.Collect call и OutOfMemory

0 голосов
/ 11 октября 2011

Когда я звоню GC.Collect все работает нормально.Но если я прокомментирую этот звонок, я время от времени получаю OutOfMemory.Выглядит очень странноКак найти эту ошибку?

Дополнительная информация В приложении имеется несколько проектов, в которых есть ссылки на различные фреймворки от 2.0 до 4.0. Приложение - это приложение для форм Windows, используется devexpress.

Ответы [ 5 ]

2 голосов
/ 12 октября 2011

Наиболее вероятные варианты:

  1. Фрагментация кучи больших объектов. В приложении используется очень большое количество коллекций большого размера, вплоть до миллиона элементов, таких как HashSet, Dictionary и т. Д. Все они время от времени вызывают Array.Resize. Таким образом, GC.Collect не решает проблему, а только замедляет фрагментацию.
  2. неуправляемый код

Отредактировано: 3. System.Drawing имеет тенденцию вызывать исключение OOM в некоторых случаях

1 голос
/ 11 октября 2011

Если вам нужно позвонить в GC.Collect, значит что-то не так. Обычно вам не нужно вызывать сборщик мусора.

  1. Попробуйте профилировщик памяти. Это покажет вам, сколько объектов какого типа потребляет вашу кучу.
  2. Проверьте ваши неуправляемые ресурсы. Каждый неуправляемый ресурс должен управляться классом, реализующим IDispoable вместе с финализатором.
1 голос
/ 11 октября 2011

Вы, вероятно, забыли утилизировать объект. Используете ли вы какие-либо базы данных или другие внешние ресурсы?

0 голосов
/ 11 октября 2011

Я бы попытался отладить проблемы управляемой памяти с помощью CLR profiler .

Кроме того, почему вы сами вызываете GC.Collect ()?Обычно это анти-паттерн.

0 голосов
/ 11 октября 2011

Обычный подход к отладке утечек памяти в .net заключается в использовании SOS -Extension (вы найдете несколько учебных пособий, таких как this , если вы проводите некоторые исследования) или использованиипрофилировщик памяти, например this one.Маби, ты просто забыла освободить (утилизировать) некоторые неуправляемые ресурсы?

...