并发可视化工具可以将 EventSource 事件显示为标记,并且可以控制标记的显示方式。 若要查看 EventSource 标记,请使用 “高级设置” 对话框注册 ETW 提供程序 GUID。 并发可视化工具的默认约定将 EventSource 事件表示为 标志标记、 范围标记和 消息标记。 可以通过向事件添加自定义字段来自定义 EventSource 事件的显示方式。 有关标记的详细信息,请参阅 并发可视化工具标记。 有关 EventSource 事件的详细信息,请参阅 System.Diagnostics.Tracing。
EventSource 事件的默认可视化效果
默认情况下,并发可视化工具使用以下约定来表示 EventSource 事件。
标记类型
- 具有 Opcode win:Start 或 win:Stop 的事件将分别视为范围的开始或结束。 无法显示嵌套或重叠区间。 无法显示从一个线程开始并在另一个线程上结束的事件对。 
- 除非其 级别 (EVENT_RECORD.EVENT_HEADER.EVENT_DESCRIPTOR 的字段)为 win:Verbose 或更高,否则 Opcode 既不是 win:Start 也不是 win:Stop 的事件将被视为标记标志。 
- 在所有其他情况下,事件被视为消息。 
重要性
下表定义事件级别如何映射到标记重要性。
| ETW级别 | 并发可视化工具的意义 | 
|---|---|
| win:LogAlways | Normal | 
| win:关键 | 危急 | 
| win:错误 | 危急 | 
| 窗口:警告 | High | 
| win:信息性 | Normal | 
| win:Verbose | Low | 
| 大于 win:verbose | Low | 
系列名称
事件的任务名称用作系列名称。 如果未为事件定义任何任务,则序列名称为空。
类别
如果级别为 win:Critical 或 win:Error,则类别为 Alert(-1)。 否则,类别为默认值 (0)。
文本
如果为事件定义了 printf 类型的格式化文本消息,则会显示为标记的说明。 否则,描述是事件名称及各个负载字段的值。
自定义 EventSource 事件的可视化效果
可以通过向事件添加相应的字段来自定义 EventSource 事件的显示方式,如以下部分所述。
标记类型
使用 cvType 字段(字节)控制用于表示事件的标记类型。 下面是 cvType 的可用值:
| cvType 值 | 生成的标记类型 | 
|---|---|
| 0 | Message | 
| 1 | Span Start | 
| 2 | 跨度结束 | 
| 3 | Flag | 
| 所有其他值 | Message | 
重要性
可以使用 cvImportance 字段(字节)来控制 EventSource 事件的重要性设置。 但是,我们建议你通过使用事件级别来控制事件的显示重要性。
| cv重要性值 | 并发可视化器的重要性 | 
|---|---|
| 0 | Normal | 
| 1 | 危急 | 
| 2 | High | 
| 3 | High | 
| 4 | Normal | 
| 5 | Low | 
| 所有其他值 | Low | 
系列名称
              cvSeries使用事件字段(字符串)控制并发可视化工具提供给 EventSource 事件的系列名称。
类别
使用 cvCategory 字段(字节)控制并发可视化工具提供给 EventSource 事件的类别。
文本
使用 cvTextW 字段(字符串)控制并发可视化工具提供给 EventSource 事件的说明。
SpanID
使用 cvSpanId 字段(整数类型)来匹配事件对。 表示一个范围的每一对开始/停止事件的值必须是唯一的。 通常对于并发代码,这需要使用同步基元,例如 Exchange 确保密钥(用于 CvSpanID 的值)正确。
注释
使用 SpanID 来嵌套跨度,允许它们在同一线程上部分重叠,或者允许它们从一个线程开始,不支持在另一个线程上结束。