Как исследовать неуправляемые утечки памяти в .NET? - PullRequest
27 голосов
/ 17 мая 2010

У меня есть служба WCF, работающая поверх MSMQ. Память постепенно увеличивается с течением времени, что указывает на утечку памяти. Я запускал службу локально и контролировал некоторые счетчики, используя PerfMon. Всего байтов управляемой памяти CLR остается относительно постоянным, в то время как частные байты процесса со временем увеличиваются. Это наводит меня на мысль, что существует какая-то неуправляемая утечка памяти. Если предположить, что проблема заключается в неуправляемой утечке памяти, как мне ее решить? Есть ли какие-либо инструменты, которые я мог бы использовать, чтобы дать мне подсказки относительно того, что вызывает неуправляемую утечку памяти? Кроме того, все, что делает моя служба, - это чтение из очереди транзакций и запись в базу данных, все как часть транзакции DTC (обрабатывается скрытно, требуя транзакции по контракту на обслуживание). Я не делаю ничего явно с COM или DllImports.

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 17 мая 2010

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

4 голосов
/ 18 мая 2010

Этот блог поможет вам, если вы хотите узнать о windbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx).

http://blogs.msdn.com/tess/default.aspx

1 голос
/ 02 мая 2011

Убедитесь, что вы закрываете сервисный клиент после его использования. что-то вроде

try {
... do work ...
Close();
} ... exception handling ... {
Abort();
}
0 голосов
/ 17 мая 2010

Ants Profiler стоит рассмотреть. Насколько я помню, вы можете скачать пробную версию.

...