ETW-Ereignisse in der Task Parallel Library und PLINQ
Die Task Parallel Library und PLINQ generieren Ereignisse für die Ereignisablaufverfolgung für Windows (ETW), die Sie zur Profilerstellung und Problembehebung für Anwendungen verwenden können, indem Sie Tools wie den Windows Performance Analyzer verwenden. In den meisten Szenarios ist der beste Weg der Profilerstellung für parallelen Anwendungscode jedoch das Verwenden der Parallelitätsschnellansicht in Visual Studio.
Task Parallel Library-ETW-Ereignisse
In der EVENT_HEADER-Struktur, ist Folgendes die ProviderId-GUID für Ereignisse, die durch Parallel.For, Parallel.ForEach und Parallel.Invoke generiert wurden:
0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5
Beginn der parallelen Schleife
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
ForkJoinContextID | System.Int32 | Ein eindeutiger Bezeichner, der verwendet wird, um Schachteln und Paare für Ereignisse mit einer Semantik für Abzweigungen und Zusammenführungen anzugeben. |
OperationType | System.Int32 | Gibt den Typ der Schleife an: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
InclusiveFrom | System.Int64 | Der Anfangswert des Schleifenzählers |
ExclusiveTo | System.Int64 | Der Endwert des Schleifenzählers |
Ende der parallelen Schleife
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
ForkJoinContextID | System.Int32 | Ein eindeutiger Bezeichner, der verwendet wird, um Schachteln und Paare für Ereignisse mit einer Semantik für Abzweigungen und Zusammenführungen anzugeben. |
totalIterations | System.Int64 | Gesamtanzahl von Iterationen |
Beginn des parallelen Aufrufs
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
ForkJoinContextID | System.Int32 | Ein eindeutiger Bezeichner, der verwendet wird, um Schachteln und Paare für Ereignisse mit einer Semantik für Abzweigungen und Zusammenführungen anzugeben. |
totalIterations | System.Int64 | Gesamtanzahl von Iterationen |
operationType | System.Int32 | Gibt den Typ der Schleife an: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
ActionCount | System.Int32 | Die Anzahl der Aktionen, die im parallelen Aufruf ausgeführt wird. |
Ende des parallelen Aufrufs
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
ForkJoinContextID | System.Int32 | Ein eindeutiger Bezeichner, der verwendet wird, um Schachteln und Paare für Ereignisse mit einer Semantik für Abzweigungen und Zusammenführungen anzugeben. |
PLINQ-ETW-Ereignisse
Die EVENT_HEADER.ProviderId-GUID für PLINQ ist:
0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87
Beginn der parallelen Abfrage
EVENT_DESCRIPTOR.Task = 1
EVENT_DESCRIPTOR.Id = 1
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
QueryID | System.Int32 | Ein eindeutiger Bezeichner der Abfrage. |
Ende der parallelen Abfrage
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
Benutzerdaten
Name | Typ | Beschreibung |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Die ID des TaskScheduler, der die Schleife gestartet hat. |
OriginatingTaskID | System.Int32 | Die ID der Aufgabe, die die Schleife gestartet hat. |
QueryID | System.Int32 | Ein eindeutiger Bezeichner der Abfrage. |