使用子系统简化分析
子系统是一种展示性能分析快照数据的方式,可让您快速了解某些系统组件(.NET Framework 的各个部分、外部库、您自己的代码等)消耗的时间。 子系统只是将某个命名空间或程序集内的所有调用分组。 例如,您可以为 System.Windows.Forms 创建一个子系统,以汇总应用程序中所有 WinForms 调用。 这将向您展示与应用程序交互所需的时间。
介绍、概念和配置
每次选择一个节点时,dotTrace 会分析所选调用堆栈的收集数据,并显示各个子系统对所选调用堆栈的贡献。 为了更好地感知,每个子系统都有其自己的颜色。 您可以分配自定义颜色或使用默认颜色。
要定义一个新子系统,您需要定义一个名称、设置颜色并指定一个或多个规则。
添加新子系统
从菜单栏中选择 。 选项 对话框打开。
点击 配置文件 ,位于 选项 对话框的左侧窗格。
点击
创建新子系统 附近的箭头,位于 配置文件 窗格,然后点击 添加空子系统。子系统定义 对话框将打开。
在 名称 字段中输入新名称。
点击 颜色 标签右侧的区域以打开 选择颜色 对话框并选择适当的颜色。
清除 在当前配置文件中启用子系统 复选框,如果您希望在当前配置文件中禁用该子系统。
指定子系统可见性选项:
显示 - 子系统将作为单独的条目显示。
结合 - 子系统的时间将包含在调用子系统的时间内计算。 仅当没有可合并的子系统时,子系统才会单独显示。
隐藏 - 子系统将被隐藏。 子系统的时间将从计算中排除。
例如,
MethodA属于SubsystemA并调用MethodB(属于SubsystemB),而后者又调用MethodC(属于SubsystemC)。 如果所有子系统都设置为 显示 ,子系统时间将按以下方式计算:
SubsystemA = MethodA
SubsystemB = MethodB
SubsystemC = MethodC
如果您将SubsystemB设置为 结合 ,子系统将按以下方式计算:
SubsystemA = MethodA + MethodB
SubsystemC = MethodC
如果您将SubsystemB设置为 隐藏 ,子系统将按以下方式计算:
SubsystemA = MethodA
SubsystemC = MethodC点击 添加 和 清理 以管理规则。 所有规则都显示在列表中。
点击 确定 以保存更改并关闭 子系统定义 对话框。
您还可以通过复制现有子系统来创建子系统。
复制子系统
从菜单栏中选择 。 选项 对话框打开。
点击 配置文件 ,位于 选项 对话框的左侧窗格。
点击
创建新子系统 附近的箭头,位于 配置文件 窗格,然后点击 重复子系统。子系统定义 对话框将打开。
如有必要,请在 子系统名称 字段中修改名称。
点击 颜色 标签右侧的区域以打开 选择颜色 对话框并重新定义颜色。
点击 添加 和 清理 以管理规则。 所有规则都显示在列表中。
点击 确定 以保存更改并关闭 子系统定义 对话框。
您可以随时返回现有子系统并修改其规则。
在定义所有必要的子系统后,您可以进一步调整设置。 所有应被考虑的子系统可以集中在一个配置文件中,并根据其重要性进行排列。 因此,配置文件只是重要或活动子系统的集合。 它可以有一个名称,也可以保持未命名。
如果一个方法匹配来自不同子系统的两个规则,则应用在子系统列表中高于另一个的子系统的规则。
创建新配置文件
从菜单栏中选择 。 选项 对话框打开。
点击 配置文件 ,位于 选项 对话框的左侧窗格。 创建了一个新的未命名配置文件。
点击
添加新配置文件 ,位于 配置文件 窗格。在配置文件列表中,会出现一个活动字段。 在此字段中为新配置文件输入名称。
在子系统列表中,通过选择相应的复选框配置活动子系统的集合。您可以选择重新排列子系统的顺序。 为此,请选择要移动的子系统,然后点击
上移所选子系统 或
下移所选子系统。点击 确定 以保存更改。
当您有多个配置文件时,您可以在 子系统 视图中切换它们,并可视化当前重要的程序集部分。
如果您对子系统配置所做的更改不满意,可以使用 重置默认值 按钮快速将其重置为出厂默认值。
查看描述
默认情况下, 子系统 视图是可见的。 如果不是,请在 启用子系统分析 页面的 配置文件 对话框中选择 选项 复选框。 之后,每次选择新的调用堆栈时,dotTrace 都会重新构建视图。


![]()
花费时间最多的子系统占据最大的块。 此块由表示子子系统的小块组成。
![]()
配置文件切换按钮可帮助您快速更改视图的配置文件,并重新构建以突出显示其他子系统。 您还可以折叠或展开视图。
![]()
子系统按时间排序。 每个子系统都显示为一个树状结构,其中叶节点是函数。
有四个独立的子系统,无论定义的模式和自定义子系统如何,它们都独立存在。 所有函数可以根据其程序集分为两组,并可以包含在 系统代码 或 用户代码 子系统中:
系统代码 - 所有不符合所选活动配置文件规则且属于标准系统库的源代码
用户代码 - 所有不符合所选活动配置文件规则且不属于标准系统库的源代码
有关将函数从一个组移动到另一个组的更多信息,请参阅 应用筛选器。
剩下的两个子系统仅用于提供有关应用程序中某些活动的信息:
垃圾收集 - 所有与垃圾回收相关的活动
特殊 - 所有不属于 .NET 库的函数
如果您不需要树状视图,可以切换到智能模式。 双击视图顶部以折叠它。
重要提示! 页面包含更多“特殊”子系统,例如 SQL 查询、 锁定争用、 CPU 就绪 等。 这些子系统基于 ETW 事件,仅在 dotTrace Viewer 中可用。