2010-05-17 2 views
24

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

Заранее благодарен!

ответ

-1

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

+18

ANTS Profiler не поддерживает неуправляемое профилирование памяти. – abhilash

3

Вы можете использовать Windbg для анализа процесса кучи. Есть некоторые статьи и чит-листы, показывающие, как это сделать, например Memory Leak Detection Using Windbg

1

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

try { 
... do work ... 
Close(); 
} ... exception handling ... { 
Abort(); 
} 
+3

Сделайте 'Close' в блоке' finally' - таким образом это произойдет, даже если есть исключение ... – Basic

Смежные вопросы