子系统
子系统 筛选器可帮助您快速评估特定调用树中时间在用户代码、系统代码、WPF、LINQ、集合、字符串等各种组件之间的分布情况。
子系统如何工作
除少数例外(请参阅下文的 特殊子系统 ),每个子系统仅对在特定命名空间或程序集内进行的调用进行分组。
例如,在 WindowsBase、 PresentationCore 和 PresentationFramework 程序集中声明的方法的所有调用都被分组到 WPF 子系统下。 在 子系统 筛选器中显示在 WPF 旁边的时间是所有选定线程中所有这些调用的总时间。

子系统名称。
在特定子系统中花费的总时间,汇总所有选定线程。
子系统中花费的时间相对于选定总时间的百分比。
按子系统应用筛选器
在 子系统 中选择所需的子系统。
选择子系统后,其他筛选器将仅显示选定子系统工作的时间间隔的数据。
特殊子系统
某些子系统的计算不是通过对特定程序集和命名空间的调用进行分组,而是基于其他数据。 请注意, timeline 快照提供了更广泛的子系统列表。
特殊子系统列表:
系统代码 :所有不符合所选活动配置文件规则且属于标准系统库的源代码。
用户代码 :所有不符合所选活动配置文件规则且不属于标准系统库的源代码。
GC 等待 :所有线程等待其他线程完成阻塞垃圾回收的时间间隔。 请注意, GC 等待 时间的计算方式与 垃圾收集 事件相比 略有不同。
JIT :所有与 JIT 编译相关的活动。 基于 ETW 事件数据计算(仅限时间线快照)。
SQL 查询 :所有与 SQL 服务器通信相关的活动。 基于 ETW 事件数据计算(仅限时间线快照)。
文件 I/O :所有与文件操作相关的活动。 请注意,此子系统的计算不仅基于文件 I/O ETW 事件,还基于对
System.IO和其他命名空间的调用分组。 因此, 文件 I/O 子系统的时间可能与 文件操作 事件的时间略有不同。正在等待 CPU :表示线程准备在下一个可用 CPU 核心上运行。 通常,这些是与线程在 CPU 核心之间切换或将线程状态从 正在等待 更改为 正在运行 相关的不可避免的暂停。 较长的 正在等待 CPU 时间间隔可能意味着线程饥饿和 CPU 过载。
基于 ETW 事件数据计算(仅限时间线快照)。
等待时间 :(仅适用于异步代码)异步方法等待其任务完成的时间间隔。 了解如何分析异步代码
锁定争用 :发生在线程尝试获取已被其他线程获取的对象锁时。 在对象释放之前,线程被阻塞(换句话说,它处于 正在等待 状态)。 在某些情况下,这可能导致所谓的 串行执行 ,从而对应用程序性能产生负面影响。 可以使用 线程 图表轻松确定串行执行模式。 线程不会并行运行,而是一次仅运行一个线程。
基于 ETW 事件数据计算(仅限时间线快照)。
配置子系统
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 将应用子系统列表中位置较高的子系统的规则。
创建新配置文件
从主菜单中选择 。 选项 对话框打开。
在左侧窗格中点击 配置文件。 创建了一个新的未命名配置文件。
点击
添加新配置文件。指定配置文件名称。
在子系统列表中,通过选择相应的复选框配置活动子系统的集合。
可选地,您可以使用
上移所选子系统 或
下移所选子系统 按钮重新排列子系统的顺序。点击 确定。
如果您对子系统配置所做的更改不满意,可以使用 重置默认值 按钮快速将其重置为出厂默认值。