Compartilhar via


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.

Confira também