Eventi ETW nella libreria TPL (Task Parallel Library) e PLINQ
La libreria TPL (Task Parallel Library) e PLINQ generano entrambi eventi ETW (Event Trace for Windows) che è possibile utilizzare per profilare e risolvere i problemi relativi ad applicazioni tramite strumenti quale l'Analizzatore prestazioni Windows. Tuttavia, nella maggior parte degli scenari, il modo migliore per profilare il codice dell'applicazione parallela consiste nell'utilizzo di Visualizzatore di concorrenze in Visual Studio Team Edition.
Eventi ETW della libreria TPL (Task Parallel Library)
Nella struttura EVENT_HEADER, il GUID di ProviderId per gli eventi generati da ParallelFor(), ParallelForEach() e ParallelInvoke() è:
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 |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
ForkJoinContextID |
Identificatore univoco utilizzato per indicare l'annidamento e coppie per gli eventi con semantica di divisione/unione. |
|
OperationType |
Indica il tipo di ciclo: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
|
InclusiveFrom |
Valore iniziale del contatore di cicli. |
|
ExclusiveTo |
Valore finale del contatore di cicli. |
Fine del ciclo parallelo
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Dati utente
Nome |
Tipo |
Descrizione |
---|---|---|
OriginatingTaskSchedulerID |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
ForkJoinContextID |
Identificatore univoco utilizzato per indicare l'annidamento e coppie per gli eventi con semantica di divisione/unione. |
|
totalIterations |
Numero totale di iterazioni. |
Inizio della chiamata parallela
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Dati utente
Nome |
Tipo |
Descrizione |
---|---|---|
OriginatingTaskSchedulerID |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
ForkJoinContextID |
Identificatore univoco utilizzato per indicare l'annidamento e coppie per gli eventi con semantica di divisione/unione. |
|
totalIterations |
Numero totale di iterazioni. |
|
operationType |
Indica il tipo di ciclo: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
|
ActionCount |
Numero di azioni che saranno eseguite nella chiamata parallela. |
Fine della chiamata parallela
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Dati utente
Nome |
Tipo |
Descrizione |
---|---|---|
OriginatingTaskSchedulerID |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
ForkJoinContextID |
Identificatore univoco utilizzato per indicare l'annidamento e coppie per gli eventi con semantica di divisione/unione. |
Eventi ETW di PLINQ
Il GUID di 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 |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
QueryID |
Identificatore di query univoco. |
Fine della query parallela
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Dati utente
Nome |
Tipo |
Descrizione |
---|---|---|
OriginatingTaskSchedulerID |
ID dell'oggetto TaskScheduler che ha avviato il ciclo. |
|
OriginatingTaskID |
ID dell'attività che ha avviato il ciclo. |
|
QueryID |
Identificatore di query univoco. |