Анализ горячего пути к корню в средстве использования памяти
При профилировании кода .NET в инструменте "Использование памяти" в Visual Studio, горячий путь к корню может помочь вам определить объекты, удерживаемые в куче, которые вызывают проблемы с использованием памяти. В контексте использования памяти горячий путь — это цепочка ссылок, определяемая профилировщиком, которая указывает на корневой объект, являющийся потенциальным источником проблем с памятью.
При вычислении полного размера объекта (общего объема памяти, удерживаемой в куче за счет поддержания объекта), полезно часто уменьшить сильно связанный граф кучи в дерево. В отличие от графа, узел в дереве имеет произвольно много дочерних элементов, но только один родительский элемент. Вместо того чтобы рассмотреть каждый возможный путь к корню для объекта, выбор наиболее вероятного пути к корню с помощью различных эвристики обычно достаточно, чтобы найти эталонную цепочку, которая, если удалена, сделает объект подходящим для сборки мусора. Некоторые из этих эвристик включают приоритет кратчайшего пути к корню, к определенным типам корней и к путям пользовательского кода. По разным причинам эта стратегия не всегда находит наиболее интересную или длинную цепочку хранения, но часто предоставляет полезную отправную точку в исследовании использования памяти.
В дереве пути к корню в инструменте использования памяти путь со значком пламени () называется горячим путем к корню (hot path).
Пример
Используйте параметр Показывать только горячие пути, чтобы отфильтровать представление в области Пути к корню.
В этом примере происходит утечка элемента управления WPF (AttachToProcess.Dialog
) через привязку, которая в конечном итоге связана с AutomationPeer
. В отфильтрованном представлении путь хранения очевиден; видим только прямой путь к корню.
При отключении параметра становится ясно, что существуют сотни привязок, и большинство путей расширения ведут к циклическим тупикам. Без визуального индикатора утомительно сортировать тысячи потенциальных путей удержания, чтобы найти возможную причину утечки.
См. также
Дополнительные сведения об инструменте использования памяти в Visual Studio см. в статье