Профилировщик CLR - Подключение к существующему процессу
Вопрос
Я хотел бы использовать что-то вроде профилей CLR в .Net 2.0, чтобы увидеть, какие объекты занимают больше места в куче в любой момент времени (ASP.Сетевой рабочий процесс).
Однако профилировщик CLR позволяет мне только ЗАПУСКАТЬ приложение, а не подключаться к существующему.Я предполагаю, что это потому, что он отслеживает распределение ресурсов и GC тоже, но меня это не очень интересует.Мне просто хотелось бы что-то, что делает снимок текущего состояния кучи и показывает мне, что там есть и сколько существует объектов каждого типа, и сколько всего байтов используется каждым типом объекта.
Есть какие-нибудь идеи?
Решение
.Net Memory Profiler - это именно то, что вам нужно. Это не бесплатно, но есть пробная версия. На самом деле я использовал пробную версию, чтобы найти утечки в нашем последнем проекте. Одна заметная особенность:
Легко определить утечки памяти по собирать и сравнивать снимки .NET память
Я думаю, это то, что вы ищете.
Другие советы
- Прикрепите отладчик
цкб -п
- загрузка расширений отладчика .net
.загружайте sos mscorwks
- выгрузите кучу в формате, понятном CLRProfiler
!Пересекающий холм heap.txt
- отсоединить отладчик
qd
- загрузить heap.txt в приложении clrprofiler
В этой статье из MSDN рассказывается о том, как использовать бесплатный CLR Profiler для сравнения с экземплярами стека. Вы правы, что в настоящее время вы не можете подключить CLR Profiler к работающему процессу (статья объясняет почему), но, как ни крути, похоже, что вы сможете это сделать в ближайшее время.
Вы смотрели на RedGates .NET Profiler?
Прошло много времени с тех пор, как я его использовал, но я уверен, что вы можете присоединиться к любому процессу CLR в любое время.