Eventi ETW nella libreria TPL (Task Parallel Library) e PLINQ

Sia Task Parallel Library che PLINQ generano eventi Event Trace for Windows (ETW) che è possibile usare per profilare e risolvere i problemi delle applicazioni con strumenti come Windows Performance Analyzer. Nella maggior parte degli scenari, tuttavia, il modo migliore per profilare il codice dell'applicazione parallela consiste nell'usare il visualizzatore di concorrenza in Visual Studio.

Eventi ETW di Task Parallel Library

Nella struttura EVENT_HEADER il GUID ProviderId per gli eventi generati da Parallel.For, Parallel.ForEach e Parallel.Invoke è:

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

Inizio del ciclo parallelo

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
ForkJoinContextID System.Int32 Identificatore univoco usato per indicare l'annidamento e le coppie per gli eventi con semantica fork/join.
Tipo operazione System.Int32 Indica il tipo di ciclo:

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach
InclusiveFrom System.Int64 Valore iniziale del contatore di cicli
ExclusiveTo System.Int64 Valore finale del contatore di cicli

Fine del ciclo parallelo

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
ForkJoinContextID System.Int32 Identificatore univoco usato per indicare l'annidamento e le coppie per gli eventi con semantica fork/join.
totalIterations System.Int64 Numero totale di iterazioni

Inizio della chiamata parallela

EVENT_DESCRIPTOR.Task = 3

EVENT_DESCRIPTOR.Id = 3

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
ForkJoinContextID System.Int32 Identificatore univoco usato per indicare l'annidamento e le coppie per gli eventi con semantica fork/join.
totalIterations System.Int64 Numero totale di iterazioni
operationType System.Int32 Indica il tipo di ciclo:

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach
ActionCount System.Int32 Numero di azioni che verranno eseguite nella chiamata parallela.

Fine della chiamata parallela

EVENT_DESCRIPTOR.Task = 4

EVENT_DESCRIPTOR.Id = 4

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
ForkJoinContextID System.Int32 Identificatore univoco usato per indicare l'annidamento e le coppie per gli eventi con semantica fork/join.

Eventi ETW di PLINQ

Il GUID EVENT_HEADER.ProviderId per PLINQ è:

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

Inizio della query parallela

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
QueryID System.Int32 Identificatore univoco di query.

Fine della query parallela

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

Dati utente

Nome Tipo Descrizione
OriginatingTaskSchedulerID System.Int32 ID di TaskScheduler che ha avviato il ciclo.
OriginatingTaskID System.Int32 ID dell'attività che ha avviato il ciclo.
QueryID System.Int32 Identificatore univoco di query.

Vedi anche