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.

Consulte también