작업 병렬 라이브러리 및 PLINQ의 ETW 이벤트

작업 병렬 라이브러리 및 PLINQ는 둘 다 Windows Performance Analyzer와 같은 도구를 사용하여 애플리케이션을 프로파일링하고 애플리케이션 문제를 해결하는 데 사용할 수 있는 ETW(Windows용 이벤트 추적) 이벤트를 생성합니다. 그러나 대부분의 경우 병렬 애플리케이션 코드를 프로파일링하는 가장 좋은 방법은 Visual Studio에서 Concurrency 시각화를 사용하는 것입니다.

작업 병렬 라이브러리 ETW 이벤트

EVENT_HEADER 구조에서 Parallel.For, Parallel.ForEachParallel.Invoke에 의해 생성된 이벤트에 대한 ProviderId GUID는 다음과 같습니다.

0x2e5dba47, 0xa3d2, 0x4d16, 0x8e, 0xe0, 0x66, 0x71, 0xff, 0xdc, 0xd7, 0xb5

병렬 루프 시작

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
ForkJoinContextID System.Int32 분기/조인 의미 체계에 따라 이벤트에 대한 중첩 및 쌍을 나타내는 데 사용되는 고유 식별자입니다.
OperationType System.Int32 루프 형식을 나타냅니다.

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach
InclusiveFrom System.Int64 루프 카운터의 시작 값입니다.
ExclusiveTo System.Int64 루프 카운터의 종료 값입니다.

병렬 루프 종료

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
ForkJoinContextID System.Int32 분기/조인 의미 체계에 따라 이벤트에 대한 중첩 및 쌍을 나타내는 데 사용되는 고유 식별자입니다.
totalIterations System.Int64 총 반복 횟수입니다.

병렬 호출 시작

EVENT_DESCRIPTOR.Task = 3

EVENT_DESCRIPTOR.Id = 3

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
ForkJoinContextID System.Int32 분기/조인 의미 체계에 따라 이벤트에 대한 중첩 및 쌍을 나타내는 데 사용되는 고유 식별자입니다.
totalIterations System.Int64 총 반복 횟수입니다.
VM에서 operationType 작업을 System.Int32 루프 형식을 나타냅니다.

1 = ParallelInvoke

2 = ParallelFor

3 = ParallelForEach
ActionCount System.Int32 병렬 호출에서 실행될 작업 수입니다.

병렬 호출 종료

EVENT_DESCRIPTOR.Task = 4

EVENT_DESCRIPTOR.Id = 4

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
ForkJoinContextID System.Int32 분기/조인 의미 체계에 따라 이벤트에 대한 중첩 및 쌍을 나타내는 데 사용되는 고유 식별자입니다.

PLINQ ETW 이벤트

PLINQ에 대한 EVENT_HEADER.ProviderId GUID는 다음과 같습니다.

0x159eeeec, 0x4a14, 0x4418, 0xa8, 0xfe, 0xfa, 0xab, 0xcd, 0x98, 0x78, 0x87

병렬 쿼리 시작

EVENT_DESCRIPTOR.Task = 1

EVENT_DESCRIPTOR.Id = 1

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
QueryID System.Int32 고유 쿼리 식별자입니다.

병렬 쿼리 종료

EVENT_DESCRIPTOR.Task = 2

EVENT_DESCRIPTOR.Id = 2

사용자 데이터

이름 형식 설명
OriginatingTaskSchedulerID System.Int32 루프를 시작한 TaskScheduler의 ID입니다.
OriginatingTaskID System.Int32 루프를 시작한 작업의 ID입니다.
QueryID System.Int32 고유 쿼리 식별자입니다.

참고 항목