任务并行库和 PLINQ 中的 ETW 事件

任务并行库和 PLINQ 都会生成 Windows 事件跟踪 (ETW) 事件,可以利用此事件通过各种工具(如 Windows 性能分析器)来分析应用程序并对其进行疑难解答。 但在大多数情况下,分析并行应用程序代码的最佳方式是使用 Visual Studio Team Edition 中的并发可视化工具

任务并行库 ETW 事件

在 EVENT_HEADER 结构中,由 ParallelFor()、ParallelForEach() 和 ParallelInvoke() 生成的事件的 ProviderId GUID 为:

0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5

并行循环开始

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

ForkJoinContextID

System.Int32

唯一的标识符,用于为具有分叉/联接语义的事件指示嵌套和成对。

OperationType

System.Int32

指示循环的类型:

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach

InclusiveFrom

System.Int64

循环计数器的起始值

ExclusiveTo

System.Int64

循环计数器的结束值

并行循环结束

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

ForkJoinContextID

System.Int32

唯一的标识符,用于为具有分叉/联接语义的事件指示嵌套和成对。

totalIterations

System.Int64

迭代总次数

并行调用开始

EVENT_DESCRIPTOR.Task = 3

EVENT_DESCRIPTOR.Id = 3

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

ForkJoinContextID

System.Int32

唯一的标识符,用于为具有分叉/联接语义的事件指示嵌套和成对。

totalIterations

System.Int64

迭代总次数

OperationType

System.Int32

指示循环的类型:

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach

ActionCount

System.Int32

在并行调用中将执行的操作数。

并行调用结束

EVENT_DESCRIPTOR.Task = 4

EVENT_DESCRIPTOR.Id = 4

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

ForkJoinContextID

System.Int32

唯一的标识符,用于为具有分叉/联接语义的事件指示嵌套和成对。

PLINQ ETW 事件

PLINQ 的 EVENT_HEADER.ProviderId GUID 为:

0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87

并行查询开始

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

QueryID

System.Int32

唯一的查询标识符。

并行查询结束

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

用户数据

姓名

类型

说明

OriginatingTaskSchedulerID

System.Int32

启动循环的 TaskScheduler 的 ID。

OriginatingTaskID

System.Int32

启动循环的任务的 ID。

QueryID

System.Int32

唯一的查询标识符。

请参见

概念

任务并行库

并行 LINQ (PLINQ)

其他资源

.NET Framework 中的 ETW 事件