Как я могу узнать, есть ли у меня утечка памяти? - PullRequest
0 голосов
/ 29 марта 2012

Я использую профилировщик памяти ANTS и в настоящий момент несколько озадачен. Если я загружаю свой сайт и подключаю ANTS к процессу, я вижу приватные байты около 90 Мб, я затем запускаю ту же процедуру несколько раз со следующими результатами:

  1. 109mb
  2. 120MB
  3. 125 МБ
  4. 126MB
  5. 123 МБ
  6. 126MB

и он в основном остается около 126 МБ для каждой попытки после. Насколько я понимаю, если бы у меня была утечка памяти, то она бы росла и не успокаивалась, но я не понимаю, почему она медленно растет до 126 Мб. Имеет ли .NET объем памяти, который ему разрешено резервировать, и он просто достигает этого предела?

Простой вопрос: память растет до некоторой точки, а затем останавливается. Это нормально для приложения .NET?

РЕДАКТИРОВАТЬ: Только что понял, что я, вероятно, должен был опубликовать это на programmers.stackexchange.com - Извинения.

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

«Утечка памяти» - это когда память вы думаете, что не должны выделяться.

Невозможно просто посмотреть на количество использованной памяти и сказать «у вас утечка памяти».Т.е. что если ваше приложение собирает журналы в памяти в течение 3 дней - в этом случае потребление памяти будет расти, но это не является признаком утечки.С другой стороны, если ваше приложение просто печатает строку в минуту, но использование памяти постоянно растет, это просто утечка.

0 голосов
/ 26 апреля 2012

По моему опыту, если я вижу рост памяти и плато, это вообще из кеширования .Как указывалось ранее, утечка памяти - это просто когда в памяти остается что-то, что, по вашему мнению, должно было быть выпущено.Использование профилировщика является отличным способом определения утечек (по сравнению с использованием диспетчера задач), поскольку он обычно обеспечивает сборку мусора во втором поколении, позволяя вам видеть все, что еще находится в памяти.Обычно я выполняю команды, которые хочу протестировать пару раз, чтобы убедиться, что все кэширование выполнено, а затем создаю снимок до и после и сравниваю дельту памяти.Если вы используете управляемый язык, такой как C #, весьма обычно иметь дельту +/- 10 КБ.Повторите этот процесс несколько раз, и если ваша дельта стабильно положительна, у вас, скорее всего, есть утечка (при условии, что вы не намеренно выделяете больше памяти).

...