分析内存使用率工具中根的热路径

在 Visual Studio 的内存使用率分析工具中分析 .NET 代码时,根的热路径可以帮助你识别堆上保留的导致内存使用问题的对象。 在内存使用的语境中,热路径 是由探查器标识的一条引用链,它指向一个可能导致内存问题的根对象。

计算对象的非独占大小(通过保持对象的活动状态而保留在堆上的内存总量)时,将强连接堆图简化为树通常会很有帮助。 与图形不同,树中的节点具有任意数量的子级,但只有单个父级。 通常,使用各种探索方法选择根的最可能路径足以找到引用链,而无需考虑对象根的每个可能路径,如果删除该引用链,对象将符合垃圾回收的条件。 其中一些探索方法包括优先尝试根的最短路径、特定根类型和用户代码路径。 出于各种原因,此方法并非一定能找到最相关或存在时间最长的保留链,但它在内存使用率调查中通常是一个很好的开始。

在内存使用工具的 到根路径的 树中,带有火焰图标的路径(显示热路径图标的屏幕截图。)称为到根路径的热路径。

使用“仅显示热路径”选项来筛选“根的路径”窗格中的视图

在此示例中,有一个 WPF 控件 (AttachToProcess.Dialog) 通过绑定泄露,该绑定最终通过 AutomationPeer 成为根。 在筛选视图中,保留路径十分明显,只有通向根的直接路径可见。

根的路径引用图的屏幕截图,其中选中了“仅显示热路径”,并突出显示了引用的线性链。

禁用该选项后,很明显有数百个绑定,并且大多数扩展路径都会导致死循环。 如果没有视觉指示器,从数千条潜在的保留路径中排序以查找泄漏的可能原因是很繁琐的。 相同的根的路径引用图的屏幕截图,不过未选中“仅显示热路径”,可以看到许多可能无法到达的路径。

另请参阅

有关 Visual Studio 内存使用情况工具的详细信息,请参阅