Udostępnij za pośrednictwem


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.

Zobacz też