JetBrains Rider 2025.2 Help

调用树

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

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

调用树

调用树

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

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

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

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

    • 更小的对象 – 分配当前比例下不重要的小尺寸对象的函数组。

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

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

  3. 函数的名称。

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

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

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

  7. 函数的命名空间。

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

单击搜索图标 调用树搜索 旁边的字段,然后开始输入函数、类或命名空间名称。 与输入字符串匹配的项将在调用树中高亮显示。

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

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

特殊符号和筛选示例

Symbol

描述

示例

*

通配符

*
集合中的所有对象

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

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

数组

[]

仅保留数组

str[]
包含 str 的类型或命名空间中的数组。 例如 字符串[]

[,
[,,
...

[,]
[,,]
...

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

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

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

!a

从结果中排除数组

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

泛型类型参数

<

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

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

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

<,
<,,
...

<,>
<,,>
...

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

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

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

!g

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

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

#c
#结构体
#分钟
#ns

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

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

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

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

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

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

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

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

冰柱图

冰柱图

冰柱图 中,每个函数调用显示为一条水平条。 条的长度取决于调用子树中分配的对象大小。 子树中分配的内存越多,条越长。 在子树中,函数调用(条)只能缩小,给子树一个类似冰柱的外观。

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

旭日图

旭日图调用树

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

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

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

  • – 标准调用树视图。

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

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