Как найти причину утечки памяти в приложении .net - PullRequest
1 голос
/ 15 февраля 2011

У меня есть приложение .net (работает как служба Windows). Время от времени начинается утечка памяти (при использовании 1 ГБ ОЗУ). Как мне найти причину этой утечки памяти? Какие инструменты есть и как вы их используете?

Ответы [ 5 ]

2 голосов
/ 15 февраля 2011

Я использовал WinDbg и SOS-расширение с успехом для отладки утечек памяти в приложениях .NET.

Посмотрите здесь и здесь , чтобы начать. Я также рекомендую блог Тесс Феррандез для получения дополнительной информации об отладке .NET с WinDbg

1 голос
/ 15 февраля 2011

В подобных ситуациях я использую, чтобы подобрать профилировщик памяти Ants или подобное и проверить количество выделенных объектов для объектов, которые распределены больше, чем ожидалось.Я особенно смотрю на формы и другие объекты с событиями, связанными с ними.Это иногда дает хорошее начало того, какие объекты участвуют в утечке.Отсюда обычная детективная работа по обнаружению «скрытой» ссылки на эти объекты.

1 голос
/ 15 февраля 2011

вы можете начать отсюда: http://msdn.microsoft.com/en-us/library/ff650691.aspx инструмент бесплатный, и в прошлом он работал для г-на, даже если его было нелегко использовать. Есть и коммерческие варианты, но они никогда не использовались.

0 голосов
/ 15 февраля 2011

Я могу рекомендовать использовать .NET Memory Profiler от Scitech (http://memprofiler.com/) для обнаружения утечки памяти в вашем приложении .NET.

0 голосов
/ 15 февраля 2011

Я использовал Муравьи один раз, и это помогло мне решить мою проблему. Как отмечает Феличе, есть несколько бесплатных инструментов, которые тоже можно использовать.

Большую часть времени ваша утечка памяти происходит от неразмещенных объектов. Попробуйте обернуть все ваши соединения в блок использования. И если вы используете какие-либо объекты COM + (например, объекты GDI + - растровые изображения и т. Д.), Всегда вызывайте Dispose (), когда вы закончите их использовать. Также забыв отменить регистрацию обработчиков событий, вы съедаете много памяти.

...