Événements ETW dans la bibliothèque parallèle de tâches et PLINQ
La bibliothèque parallèle de tâches et PLINQ génèrent les événements de suivi d’événements pour Windows (ETW) que vous pouvez utiliser pour profiler et dépanner des applications à l’aide d’outils tels que Windows Performance Analyzer. Cependant, dans la plupart des scénarios, la meilleure façon de profiler du code d’application parallèle est d’utiliser le Visualiseur concurrentiel dans Visual Studio.
Événements ETW de la bibliothèque parallèle de tâches
Dans la structure EVENT_HEADER, le GUID ProviderId pour les événements générés par Parallel.For, Parallel.ForEach et Parallel.Invoke est :
0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5
Début de la boucle parallèle
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
ForkJoinContextID | System.Int32 | Identificateur unique utilisé pour indiquer l’imbrication et les paires pour les événements comportant des sémantiques de bifurcation/jonction. |
OperationType | System.Int32 | Indique le type de boucle : 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
InclusiveFrom | System.Int64 | Valeur de départ du compteur de boucles |
ExclusiveTo | System.Int64 | Valeur de fin du compteur de boucles |
Fin de la boucle parallèle
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
ForkJoinContextID | System.Int32 | Identificateur unique utilisé pour indiquer l’imbrication et les paires pour les événements comportant des sémantiques de bifurcation/jonction. |
totalIterations | System.Int64 | Nombre total d’itérations |
Début de l’appel parallèle
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
ForkJoinContextID | System.Int32 | Identificateur unique utilisé pour indiquer l’imbrication et les paires pour les événements comportant des sémantiques de bifurcation/jonction. |
totalIterations | System.Int64 | Nombre total d’itérations |
operationType | System.Int32 | Indique le type de boucle : 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
ActionCount | System.Int32 | Nombre d’actions qui seront exécutées dans l’appel parallèle. |
Fin de l’appel parallèle
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
ForkJoinContextID | System.Int32 | Identificateur unique utilisé pour indiquer l’imbrication et les paires pour les événements comportant des sémantiques de bifurcation/jonction. |
Événements ETW de PLINQ
Le GUID EVENT_HEADER.ProviderId pour PLINQ est :
0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87
Début de requête parallèle
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
QueryID | System.Int32 | Identificateur de requête unique. |
Fin de requête parallèle
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Données utilisateur
Nom | Type | Description |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | ID du TaskScheduler qui a démarré la boucle. |
OriginatingTaskID | System.Int32 | ID de la tâche qui a démarré la boucle. |
QueryID | System.Int32 | Identificateur de requête unique. |