dotMemory 2025.2 Help

调用树

调用树 视图显示了负责创建所选对象集的堆栈跟踪。 使用此视图回答“哪个函数创建了对象?”并识别分配过多内存的函数。

为了简化分析,dotMemory 允许您将调用树可视化为 冰柱图旭日图

调用树

调用树

调用树中的每个节点代表一个函数调用。 函数名称旁的数字显示由该调用分配的对象大小或这些对象的数量。 要在这些模式之间切换,请使用顶部的按钮。

调用树节点
  1. 图标表示函数在 旭日图冰柱图 上的显示方式。 图标颜色对应于图表上函数的颜色。 可能存在以下图标:

    • 当前作用域中的函数 – 当前图表范围内的根函数。

    • 子树分配 – 函数本身不从所选集合中分配对象,但其子树(子函数)会分配。

    • 更小的对象 – 分配小尺寸对象的函数组,在当前比例下不显著。

    • 无图标 – 函数未显示在旭日图或冰柱图上。

  2. 函数及其子树分配的总内存百分比或对象数量。

  3. 函数的名称。

  4. 函数及其子树分配的内存总量(或对象数量)。

  5. 函数本身分配的内存量(或对象数量)。

  6. 包括其类的完整函数名称。

  7. 函数的命名空间。

按名称查找函数、类、命名空间

开始输入函数、类或命名空间名称。 与输入字符串匹配的项目将在调用树中高亮显示。

在调用树中搜索
  • 使用 CamelHumps。 例如, fo 将返回 System.Drawing.FontMS.Utility.FrugalObjectList 类型的对象。

  • 使用 特殊符号 ,例如通配符和其他符号。 完整列表显示在下表中。

特殊符号和筛选示例

符号

描述

示例

*

通配符

*
集合中的所有对象

sys.*.data
所有匹配模式的类型和命名空间。 例如, System.DataSystem.Windows.Controls.DatagridSystem.Windows.Data.Binding

sys.*.data.
仅匹配模式的命名空间。 例如, System.Windows.Data.Binding ,但 不是System.Windows.Controls.Datagrid

数组

[]

仅保留数组

str[]
包含 str 的类型或命名空间中的数组。 例如, String[]

[,
[,,
...

[,]
[,,]
...

仅保留指定维度或更高维度(如果括号未闭合)的数组

str[,,
包含 str 的类型或命名空间中维度为 3 或更高的数组。 例如, String[,,]String[,,,]

str[,,]
包含 str 的类型或命名空间中的三维数组。 例如, String[,,]

!a

从结果中排除数组

!a str
包含 str 的类型或命名空间中的对象(不包括数组)。 例如, String ,但 不是String[]

泛型类型参数

<

仅保留具有泛型类型参数的类型

str<
仅包含 str 的类型或命名空间并具有泛型类型参数的对象。 例如, FileStreamStorage<Char> ,但 不是List<String>

<str
仅包含 str 的泛型类型参数中的对象。 例如, List<String> ,但 不是FileStreamStorage<Char>

<,
<,,
...

<,>
<,,>
...

仅保留具有指定数量泛型类型参数的对象

fun<,,>
包含 fun 的类型或命名空间并具有三个泛型类型参数的对象。 例如, Func<String, Object, Object>

fun<str,,task
包含 fun 的类型或命名空间并具有三个或更多匹配模式的泛型类型参数的对象。 例如, Func<Stream, IAsyncResult, TaskResult, EventArgs>

!g

从搜索范围中排除泛型类型参数

!g str
包含 str 的类型或命名空间中不具有泛型类型参数的对象。 例如, String ,但 不是List<String>

#c
#struct
#m
#ns

按类型、值类型、方法或命名空间搜索。

#ns Feature
包含 Feature 的命名空间中的对象。

选择对象以进行进一步分析

要选择对象以进行进一步分析,请右键点击调用树中的函数并选择以下选项之一:

  • 打开由该函数的此实例分配的对象 – 选择由特定函数实例(精确调用)分配的对象。 或者,您可以在函数调用上使用 Shift+点击 (在调用树和图表中均可用)。

  • 打开由此子树中的所有函数分配的对象 – 选择在函数子树(函数实例及其所有子调用)中分配的对象。 或者,您可以在函数调用上使用 Alt+点击 (在调用树和图表中均可用)。

  • 打开由该函数的所有实例分配的对象 – 选择在函数的所有实例中分配的对象(如果函数从不同的调用堆栈中调用,这些调用会在调用树中单独显示)。

之后,相应的分析主题将被添加到左侧面板的 分析路径 中。

冰柱图

冰柱图

冰柱图 中,每个函数调用显示为一条水平条。 条的长度取决于调用子树中分配的对象大小。 在底层子树中分配的内存越多,条的长度越长。 在子树中,函数调用(条)只能缩小,使子树看起来像冰柱。

要专注于特定的调用子树,请双击相应的条。 图表将放大子树,并将所选调用设为根。

旭日图

旭日图调用树

除了冰柱图,您还可以将调用树可视化为旭日图。 旭日图是一个圆形图,分为多个段,每个段代表一个函数调用。 段的中心角越大,该调用中分配的内存越多。 与冰柱图一样,旭日图可以让您快速识别堆栈中的主要内存生成器。 在功能、行为和数据表示方面,旭日图是冰柱图的完整对应物。

要切换到旭日图,请使用视图顶部的切换器。

当选择 旭日图 时,您可以以两种模式查看调用树:

  • – 标准调用树视图。

  • 路径 – 从根调用到所选调用路径上的调用的简单列表。 不在路径上的所有调用都被隐藏。 此模式在您需要专注于特定调用路径时非常有用。

最后修改日期: 2025年 9月 27日