Поделиться через


События трассировки событий Windows в библиотеке параллельных задач и PLINQ

Библиотека параллельных задач и PLINQ создают события трассировки событий Windows (ETW), которые можно использовать для профилирования и устранения неполадок в приложениях с помощью таких средств, как Windows Performance Analyzer. Однако в большинстве сценариев лучший способ профилирования параллельного кода приложения — использовать визуализатор параллелизма в Visual Studio.

События трассировки событий Windows в библиотеке параллельных задач (TPL)

В структуре EVENT_HEADER используется следующий идентификатор GUID ProviderId для событий, создаваемых Parallel.For, Parallel.ForEach и Parallel.Invoke:

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

Начало параллельного цикла

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

Данные пользователя

имя; Тип Описание
OriginatingTaskSchedulerID System.Int32 Идентификатор объекта TaskScheduler, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
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, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
ForkJoinContextID System.Int32 Уникальный идентификатор, используемый для обозначения вложений и пар для событий с семантикой ветвления и соединения.
totalIterations System.Int64 Общее количество итераций

Начало параллельного вызова

EVENT_DESCRIPTOR.Task = 3

EVENT_DESCRIPTOR.Id = 3

Данные пользователя

имя; Тип Описание
OriginatingTaskSchedulerID System.Int32 Идентификатор объекта TaskScheduler, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
ForkJoinContextID System.Int32 Уникальный идентификатор, используемый для обозначения вложений и пар для событий с семантикой ветвления и соединения.
totalIterations System.Int64 Общее количество итераций
"тип_операции" System.Int32 Указывает тип цикла:

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach
ActionCount System.Int32 Количество действий, которые будут выполнены при параллельном вызове.

Конец параллельного вызова

EVENT_DESCRIPTOR.Task = 4

EVENT_DESCRIPTOR.Id = 4

Данные пользователя

имя; Тип Описание
OriginatingTaskSchedulerID System.Int32 Идентификатор объекта TaskScheduler, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
ForkJoinContextID System.Int32 Уникальный идентификатор, используемый для обозначения вложений и пар для событий с семантикой ветвления и соединения.

События трассировки событий Windows в PLINQ

GUID EVENT_HEADER.ProviderId для PLINQ:

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

Начало параллельного запроса

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

Данные пользователя

имя; Тип Описание
OriginatingTaskSchedulerID System.Int32 Идентификатор объекта TaskScheduler, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
QueryID System.Int32 Уникальный идентификатор запроса.

Конец параллельного запроса

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

Данные пользователя

имя; Тип Описание
OriginatingTaskSchedulerID System.Int32 Идентификатор объекта TaskScheduler, который начал цикл.
OriginatingTaskID System.Int32 Идентификатор задачи, которая начала цикл.
QueryID System.Int32 Уникальный идентификатор запроса.

См. также раздел