Zdarzenia ETW w bibliotece równoległych zadań i PLINQ
Zarówno biblioteka równoległa zadań, jak i PLINQ generują zdarzenia śledzenia zdarzeń systemu Windows (ETW), których można użyć do profilowania i rozwiązywania problemów z aplikacjami przy użyciu narzędzi, takich jak windows Analizator wydajności. Jednak w większości scenariuszy najlepszym sposobem profilowania równoległego kodu aplikacji jest użycie wizualizatora współbieżności w programie Visual Studio.
Zdarzenia ETW biblioteki równoległej zadań
W strukturze EVENT_HEADER identyfikator GUID identyfikatora ProviderId dla zdarzeń generowanych przez Parallel.ForParallel.ForEach element i Parallel.Invoke jest:
0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5
Początek pętli równoległej
EVENT_DESCRIPTOR. Zadanie = 1
EVENT_DESCRIPTOR. Identyfikator = 1
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
OriginatingTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
ForkJoinContextID | System.Int32 | Unikatowy identyfikator służący do wskazywania zagnieżdżania i par dla zdarzeń z semantyki rozwidlenia/sprzężenia. |
OperationType | System.Int32 | Wskazuje typ pętli: 1 = ParallelInvoke 2 = Równoległe 3 = ParallelForEach |
InclusiveFrom | System.Int64 | Wartość początkowa licznika pętli |
ExclusiveTo | System.Int64 | Wartość końcowa licznika pętli |
Koniec pętli równoległej
EVENT_DESCRIPTOR. Zadanie = 2
EVENT_DESCRIPTOR. Identyfikator = 2
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
OriginatingTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
ForkJoinContextID | System.Int32 | Unikatowy identyfikator służący do wskazywania zagnieżdżania i par dla zdarzeń z semantyki rozwidlenia/sprzężenia. |
totalIterations | System.Int64 | Całkowita liczba iteracji |
Początek wywołania równoległego
EVENT_DESCRIPTOR. Zadanie = 3
EVENT_DESCRIPTOR. Identyfikator = 3
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
OriginatingTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
ForkJoinContextID | System.Int32 | Unikatowy identyfikator służący do wskazywania zagnieżdżania i par dla zdarzeń z semantyki rozwidlenia/sprzężenia. |
totalIterations | System.Int64 | Całkowita liczba iteracji |
operationType | System.Int32 | Wskazuje typ pętli: 1 = ParallelInvoke 2 = Równoległe 3 = ParallelForEach |
ActionCount | System.Int32 | Liczba akcji, które zostaną wykonane w wywołaniu równoległym. |
Równoległe wywołanie — koniec
EVENT_DESCRIPTOR. Zadanie = 4
EVENT_DESCRIPTOR. Identyfikator = 4
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
OriginatingTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
ForkJoinContextID | System.Int32 | Unikatowy identyfikator służący do wskazywania zagnieżdżania i par dla zdarzeń z semantyki rozwidlenia/sprzężenia. |
Zdarzenia ETW PLINQ
The EVENT_HEADER. Identyfikator GUID identyfikatora PROVIDERId dla PLINQ to:
0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87
Początek zapytania równoległego
EVENT_DESCRIPTOR. Zadanie = 1
EVENT_DESCRIPTOR. Identyfikator = 1
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
OriginatingTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
Identyfikator zapytania | System.Int32 | Unikatowy identyfikator zapytania. |
Równoległe zakończenie zapytania
EVENT_DESCRIPTOR. Zadanie = 2
EVENT_DESCRIPTOR. Identyfikator = 2
Dane użytkownika
Nazwa | Typ | Opis |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | Identyfikator elementu TaskScheduler, który uruchomił pętlę. |
Identyfikator źródłowyTaskID | System.Int32 | Identyfikator zadania, które uruchomiło pętlę. |
Identyfikator zapytania | System.Int32 | Unikatowy identyfikator zapytania. |