Eventos ETW en Task Parallel Library y PLINQ
Tanto la biblioteca TPL como PLINQ generan eventos ETW (Seguimiento de eventos de Windows) que puede usar para generar perfiles y solucionar problemas de aplicaciones con herramientas como el Analizador de rendimiento de Windows. En cambio, en la mayoría de los escenarios, la mejor forma de generar perfiles del código de aplicación paralelo es usar el Visualizador de simultaneidad en Visual Studio.
Eventos ETW de la biblioteca TPL
En la estructura EVENT_HEADER, el GUID ProviderId para los eventos generados por Parallel.For, Parallel.ForEach y Parallel.Invoke 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
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
ForkJoinContextID | System.Int32 | 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 | System.Int32 | Indica el tipo de bucle: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
InclusiveFrom | System.Int64 | El valor de inicio del contador de bucle |
ExclusiveTo | System.Int64 | El valor final del contador de bucle |
Fin de bucle paralelo
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Datos del usuario
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
ForkJoinContextID | System.Int32 | 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 | System.Int64 | El número total de iteraciones |
Comienzo de la invocación paralela
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Datos del usuario
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
ForkJoinContextID | System.Int32 | 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 | System.Int64 | El número total de iteraciones |
operationType | System.Int32 | Indica el tipo de bucle: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
ActionCount | System.Int32 | El número de acciones que se ejecutarán en la invocación paralela. |
Fin de la invocación paralela
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Datos del usuario
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
ForkJoinContextID | System.Int32 | 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
Comienzo de la consulta paralela
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Datos del usuario
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
QueryID | System.Int32 | Un identificador de consulta único. |
Fin de la consulta paralela
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Datos del usuario
Nombre | Tipo | Descripción |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | El identificador del objeto TaskScheduler que ha iniciado el bucle. |
OriginatingTaskID | System.Int32 | El identificador de la tarea que ha iniciado el bucle. |
QueryID | System.Int32 | Un identificador de consulta único. |