Подтвердить что ты не робот

Определение распределения объектов для объектов в куче

Есть ли какой-нибудь инструмент, чтобы он мог получить кучу кучи из работающего приложения и определять/группировать объекты по тому, где в исходном коде они были созданы?

Без изменений в исходном коде и в идеале что-то бесплатно.

4b9b3361

Ответ 1

Как другие предложили профилировщики памяти, Memprofiler определенно самый продвинутый (я пробовал все существующие профилировщики .NET). У него 14-дневная пробная версия.

Ответ 2

Как насчет .NET Memory Profiler от ANTS, например. Возможно, CLR Profiler.

Ответ 3

Информация не доступна, если вы создали дамп памяти. Чтобы собрать это, вы должны следить за процессом, когда он работает. Вы можете запустить приложение через WinDbg и установить точки останова для всех интересующих вас конструкторов (надеюсь, вы не захотите смотреть на каждый объект).

Если вы создадите точку останова, чтобы она выгружала стек, у вас будет точка создания для объекта. Однако имейте в виду, что объекты могут перемещаться во время GC, что в некоторых случаях затрудняет (или даже невозможно) создание паринных объектов со стеками.

Поскольку ваш вопрос отмечен производительностью и профилированием, я понимаю, что вы хотите сократить выделение памяти. Почему бы просто не взглянуть на количество созданных объектов (или, возможно, посмотреть на самые большие созданные объекты), посмотрев на кучу. Затем просмотрите исходный код и выясните, где создаются такие экземпляры.

Ответ 4

Вам нужен профилировщик .NET. Эти инструменты позволяют следить за графами объектов в собранной кучей мусора и могут быть очень полезны при идентификации источников утечек памяти. Хотя они могут не обязательно сообщать вам метод, в котором был создан объект, они расскажут, в каких экземплярах, какие классы удерживают объекты, и позволяют вам различать снимки gc кучи. Они не требуют изменений в исходном коде. Вы можете взглянуть на Какие хорошие профили .NET?

Ответ 5

Наши команды QA используют http://www.jetbrains.com/profiler/ для такого рода вещей, когда мы сталкиваемся с узкими местами. Я уверен, что он даст вам список распределений по вызову метода. Я поставлю его и проверьте:)

Ответ 6

Добрый старый windbg + sos + pdb сделает демпинг. Что касается "где в исходном коде они были созданы" часть - невозможно без инструментария или инъекции.