Поделиться через


Анализ горячего пути к корню в средстве использования памяти

При профилировании кода .NET в инструменте "Использование памяти" в Visual Studio, горячий путь к корню может помочь вам определить объекты, удерживаемые в куче, которые вызывают проблемы с использованием памяти. В контексте использования памяти горячий путь — это цепочка ссылок, определяемая профилировщиком, которая указывает на корневой объект, являющийся потенциальным источником проблем с памятью.

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

В дереве пути к корню в инструменте использования памяти путь со значком пламени (Снимок экрана с иконкой горячего пути.) называется горячим путем к корню (hot path).

Пример

Используйте параметр Показывать только горячие пути, чтобы отфильтровать представление в области Пути к корню.

В этом примере происходит утечка элемента управления WPF (AttachToProcess.Dialog) через привязку, которая в конечном итоге связана с AutomationPeer. В отфильтрованном представлении путь хранения очевиден; видим только прямой путь к корню.

снимок экрана: диаграмма путей к корневой ссылке. Показывать только горячие пути проверяется, выделена линейная цепочка ссылок.

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

См. также

Дополнительные сведения об инструменте использования памяти в Visual Studio см. в статье