작업 병렬 라이브러리 및 PLINQ의 ETW 이벤트
작업 병렬 라이브러리 및 PLINQ는 둘 다 Windows Performance Analyzer와 같은 도구를 사용하여 애플리케이션을 프로파일링하고 애플리케이션 문제를 해결하는 데 사용할 수 있는 ETW(Windows용 이벤트 추적) 이벤트를 생성합니다. 그러나 대부분의 경우 병렬 애플리케이션 코드를 프로파일링하는 가장 좋은 방법은 Visual Studio에서 Concurrency 시각화를 사용하는 것입니다.
작업 병렬 라이브러리 ETW 이벤트
EVENT_HEADER 구조에서 Parallel.For, Parallel.ForEach 및 Parallel.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 | 고유 쿼리 식별자입니다. |
참고 항목
.NET