Какие стратегии и инструменты полезны для обнаружения утечек памяти в .NET? - PullRequest
147 голосов
/ 25 сентября 2008

Я написал C ++ в течение 10 лет. У меня возникли проблемы с памятью, но они могли быть устранены с разумным усилием.

Последние пару лет я пишу на C #. Я все еще получаю много проблем с памятью. Их сложно диагностировать и исправить из-за недетерминированности, а также потому, что философия C # заключается в том, что вам не нужно беспокоиться о таких вещах, когда вы совершенно точно это делаете.

Одна конкретная проблема, которую я нахожу, заключается в том, что я должен явно распоряжаться и очищать все в коде. Если я этого не сделаю, то профилировщики памяти на самом деле не помогают, потому что вокруг так много плывущей болтовни, что вы не можете найти утечку во всех данных, которые они пытаются вам показать. Интересно, у меня неправильная идея или инструмент, который у меня есть, не самый лучший.

Какие стратегии и инструменты полезны для устранения утечек памяти в .NET?

Ответы [ 14 ]

2 голосов
/ 17 сентября 2012

После одного из моих исправлений для управляемого приложения у меня было то же самое, например, как проверить, что у моего приложения не будет такой же утечки памяти после моего следующего изменения, поэтому я написал что-то вроде инфраструктуры проверки выпуска объекта, пожалуйста, примите Посмотрите на пакет NuGet ObjectReleaseVerification . Вы можете найти образец здесь https://github.com/outcoldman/OutcoldSolutions-ObjectReleaseVerification-Sample, и информацию об этом образце http://outcoldman.ru/en/blog/show/322

2 голосов
/ 25 сентября 2008

Одним из лучших инструментов является использование Средства отладки для Windows и получение дампа памяти процесса с помощью adplus , затем используйте windbg и sos Плагин для анализа памяти процесса, потоков и стеков вызовов.

Этот метод также можно использовать для выявления проблем на серверах. После установки инструментов откройте общий доступ к каталогу, затем подключитесь к общему ресурсу с сервера (использование по сети) и выполните аварийный сбой или зависание дампа процесса.

Затем проанализируйте в автономном режиме.

2 голосов
/ 25 сентября 2008

Лучше всего помнить о том, чтобы отслеживать ссылки на ваши объекты. Очень легко получить висящие ссылки на объекты, которые вам больше не нужны. Если вы больше не собираетесь что-то использовать, избавьтесь от этого.

Привыкайте использовать провайдер кеша со скользящим сроком действия, поэтому, если что-то не указано для нужного временного окна, оно разыменовывается и очищается Но если к нему обращаются много, он скажет в памяти.

0 голосов
/ 05 мая 2018

В Visual Studio 2015 рассмотрите возможность использования готового к использованию инструмента диагностики использования памяти для сбора и анализа данных об использовании памяти.

Средство использования памяти позволяет вам сделать один или несколько снимков управляемой и собственной кучи памяти, чтобы понять влияние использования типов памяти на типы памяти.

...