Вам может пригодиться следующая статья из MSDN:
Производственная отладка для приложений .NET Framework
http://msdn.microsoft.com/en-us/library/ms954591.aspx
Несмотря на то, что в нем подробно рассматриваются приложения ASP.NET, некоторые из описанных методов так же действительны при выполнении анализа памяти в сервисах или автономных приложениях.
Возможно, вы также захотите использовать Perfmon для подключения к процессу и посмотреть, значительно ли увеличивается объем кучи Gen 1 или Gen 2 - это обычно указывает на объекты, которые пережили слишком много сборок мусора и создали память давление в вашем приложении. Возможно, вы также захотите взглянуть на размер метрики «Частные байты» - рост там показывает, что для вашего процесса выделяется много неуправляемой памяти.
Анализ производительности полезен, потому что он может показать сверхурочное использование памяти и помочь определить, ответственны ли определенные типы обработки или транзакции за потребление памяти.
Если вы можете воспроизвести проблему в тестовой среде, есть превосходный профилировщик памяти от сотрудников Red Gate Software , который может помочь выявить такие проблемы за долю времени, которое потребуется для копания дампы памяти.
Есть некоторые инструменты, которые могут работать в фоновом режиме (например, DebugDiag), которые позволяют периодически генерировать дампы памяти или при возникновении определенных событий. Вы можете прочитать о них здесь:
http://blogs.msdn.com/sukeshak/pages/ddintro.aspx
http://blogs.msdn.com/tess/archive/2009/01/23/net-hang-analyzing-debug-diag-output.aspx