Определение места выделения объектов для объектов в куче - PullRequest
12 голосов
/ 21 июня 2011

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

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

Ответы [ 7 ]

3 голосов
/ 24 июня 2011

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

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

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

3 голосов
/ 21 июня 2011

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

1 голос
/ 27 июня 2011

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

1 голос
/ 27 июня 2011

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

0 голосов
/ 30 июня 2011

Расширение SOS * Отладка

Как использовать: http://msdn.microsoft.com/en-us/library/yy6d2sxs.aspx

0 голосов
/ 23 июня 2011

Старый добрый windbg + sos + pdb сделает демпинг. Что касается части «где в исходном коде они были созданы» - это невозможно без инструментовки или внедрения.

0 голосов
/ 21 июня 2011

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

...