События трассировки событий 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 | Уникальный идентификатор запроса. |