Eventos ETW en Task Parallel Library y PLINQ
Tanto Task Parallel Library como PLINQ generan eventos ETW (Seguimiento de eventos de Windows) que puede utilizar para perfilar y solucionar problemas de aplicaciones con herramientas como el Analizador de rendimiento de Windows. Sin embargo, en la mayoría de los escenarios, la manera mejor de perfilar el código paralelo de aplicación es con Visualizador de simultaneidad en Visual Studio Team Edition.
Eventos ETW de Task Parallel Library
En la estructura EVENT_HEADER, el GUID ProviderId para los eventos generados por ParallelFor(), ParallelForEach() e ParallelInvoke() es:
0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5
Comienzo de bucle paralelo
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
ForkJoinContextID |
El identificador único que se usa para indicar la anidación y los pares de eventos con semántica de bifurcación o combinación. |
|
OperationType |
Indica el tipo de bucle: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
|
InclusiveFrom |
El valor de inicio del contador de bucle |
|
ExclusiveTo |
El valor final del contador de bucle |
Fin de bucle paralelo
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
ForkJoinContextID |
El identificador único que se usa para indicar la anidación y los pares de eventos con semántica de bifurcación o combinación. |
|
totalIterations |
El número total de iteraciones. |
Comienzo de Invoke paralela
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
ForkJoinContextID |
El identificador único que se usa para indicar la anidación y los pares de eventos con semántica de bifurcación o combinación. |
|
totalIterations |
El número total de iteraciones. |
|
operationType |
Indica el tipo de bucle: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
|
ActionCount |
El número de acciones que se ejecutarán en la invocación paralela. |
Fin de Invoke paralela
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
ForkJoinContextID |
El identificador único que se usa para indicar la anidación y los pares de eventos con semántica de bifurcación o combinación. |
Eventos ETW de PLINQ
El GUID EVENT_HEADER.ProviderId de PLINQ es:
0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87
Comienza la consulta paralela
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
QueryID |
Un identificador de consulta único. |
Fin de la consulta paralela
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Datos del usuario
Name |
Tipo |
Descripción |
---|---|---|
OriginatingTaskSchedulerID |
El identificador del objeto TaskScheduler que inició el bucle. |
|
OriginatingTaskID |
El identificador de la tarea que inició el bucle. |
|
QueryID |
Un identificador de consulta único. |