Профилировщик CLR - Подключение к существующему процессу

StackOverflow https://stackoverflow.com/questions/33727

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы использовать что-то вроде профилей 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 в любое время.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top