工作平行程式庫和 PLINQ 中的 ETW 事件
工作平行程式庫和 PLINQ 都會產生 Windows 事件追蹤 (ETW) 事件,您可使用 Windows Performance Analyzer 等工具,利用這些事件對應用程式進行程式碼剖析和疑難排解。 然而,在大部分案例中,分析平行應用程式碼的最佳方式為使用 Visual Studio 中的並行視覺化檢視。
工作平行程式庫 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 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
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 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
ForkJoinContextID | System.Int32 | 用來指出巢狀結構和事件派生/聯結語意組的唯一識別碼。 |
totalIterations | System.Int64 | 反覆項目總數 |
平行叫用開始
EVENT_DESCRIPTOR.Task = 3
EVENT_DESCRIPTOR.Id = 3
使用者資料
名稱 | 類型 | 說明 |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | 啟動迴圈的 TaskScheduler 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
ForkJoinContextID | System.Int32 | 用來指出巢狀結構和事件派生/聯結語意組的唯一識別碼。 |
totalIterations | System.Int64 | 反覆項目總數 |
operationType | System.Int32 | 指出迴圈的類型: 1 = ParallelInvoke 2 = ParallelFor 3 = ParallelForEach |
ActionCount | System.Int32 | 在平行叫用中會執行的動作數目。 |
平行叫用結束
EVENT_DESCRIPTOR.Task = 4
EVENT_DESCRIPTOR.Id = 4
使用者資料
名稱 | 類型 | 說明 |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | 啟動迴圈的 TaskScheduler 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
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 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
QueryID | System.Int32 | 唯一的查詢識別碼。 |
平行查詢結束
EVENT_DESCRIPTOR.Task = 2
EVENT_DESCRIPTOR.Id = 2
使用者資料
名稱 | 類型 | 說明 |
---|---|---|
OriginatingTaskSchedulerID | System.Int32 | 啟動迴圈的 TaskScheduler 識別碼。 |
OriginatingTaskID | System.Int32 | 啟動迴圈的工作識別碼。 |
QueryID | System.Int32 | 唯一的查詢識別碼。 |