Eventos ETW na biblioteca de tarefas paralelas e em PLINQ
A Biblioteca de Paralelismo de Tarefas e o PLINQ geram eventos ETW (Rastreamento de Eventos para Windows) que podem ser usados para criar o perfil e solucionar problemas de aplicativos usando ferramentas como o Windows Performance Analyzer. No entanto, na maioria dos cenários, a melhor maneira de criar o perfil do código do aplicativo paralelo é usar a Visualização Simultânea no Visual Studio.
Eventos ETW da Biblioteca de Paralelismo de Tarefas
Na estrutura de EVENT_HEADER, o GUID de ProviderId para os eventos gerados por Parallel.For, Parallel.ForEach e Parallel.Invoke é:
0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5
Início do loop paralelo
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
ForkJoinContextID | System.Int32 | Um identificador exclusivo usado para indicar o aninhamento e pares de eventos com semântica de fork/junção. |
OperationType | System.Int32 | Indica o tipo de loop: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
InclusiveFrom | System.Int64 | O valor inicial do contador de loops |
ExclusiveTo | System.Int64 | O valor final do contador de loops |
Fim do loop paralelo
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
ForkJoinContextID | System.Int32 | Um identificador exclusivo usado para indicar o aninhamento e pares de eventos com semântica de fork/junção. |
totalIterations | System.Int64 | O número total de iterações |
Início da invocação paralela
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
ForkJoinContextID | System.Int32 | Um identificador exclusivo usado para indicar o aninhamento e pares de eventos com semântica de fork/junção. |
totalIterations | System.Int64 | O número total de iterações |
operationType | System.Int32 | Indica o tipo de loop: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
ActionCount | System.Int32 | O número de ações que serão executadas na invocação paralela. |
Fim da invocação paralela
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
ForkJoinContextID | System.Int32 | Um identificador exclusivo usado para indicar o aninhamento e pares de eventos com semântica de fork/junção. |
Eventos ETW do PLINQ
O GUID de EVENT_HEADER.ProviderId do PLINQ é:
0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87
Início da consulta paralela
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
QueryID | System.Int32 | Um identificador exclusivo de consulta. |
Fim da consulta paralela
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Dados de usuário
Nome | Tipo | Descrição |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | A ID do TaskScheduler que iniciou o loop. |
OriginatingTaskID | System.Int32 | A ID da tarefa que iniciou o loop. |
QueryID | System.Int32 | Um identificador exclusivo de consulta. |