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. |