多核處理器普及迫使開發者撰寫多執行緒程式以榨取效能。但執行緒間通訊與同步(如 lock、Monitor、CriticalSection)若設計不當,反而因鎖爭用拖垮效能。VS2010 引入資源爭用並發分析,專門偵測此類瓶頸。
範例程式使用多執行緒計算矩陣乘法,每個執行緒負責結果矩陣 C 的不同列,理論上無寫入衝突,卻在整個雙重迴圈外包裹 EnterCriticalSection/LeaveCriticalSection:
for (i = myid*PerProcessorChunk; i < (myid+1)*PerProcessorChunk; i++) {
EnterCriticalSection(&mmlock);
for (j=0; j


三大關鍵區域:

點擊資源名稱(如「關鍵區段 1」)進入。上半部時間軸顯示各執行緒爭用區塊(長度=阻塞時間),Total 列為所有爭用投影。大量重疊意味並行化極差:

選取爭用區塊 → 底部呼叫堆疊 → 雙擊函式名稱(MatMult)定位原始碼行:EnterCriticalSection(&mmlock) 為禍首:

切換視角檢視特定執行緒被哪些資源阻塞,或進程層級的執行緒生命週期、爭用統計:


點擊資源視圖的「Total」超連結進入爭用視圖,依資源分組的呼叫樹並標示熱路徑:

// EnterCriticalSection(&mmlock);
// LeaveCriticalSection(&mmlock);
重新分析:爭用次數從 1,003 降為 1(僅剩啟動/結束同步):

使用 效能總管 → 比較效能報告 直觀對比:MatMult 爭用歸零:

VSPerfCmd.exe /start:CONCURRENCY,RESOURCEONLY /output:Result.vsp
VSPerfCmd.exe /launch:MyApp.exe /args:"params"
VSPerfCmd.exe /detach
VSPerfCmd.exe /shutdown
支援附加至執行中進程 (/attach:PID),適合 CI/CD 整合。
| 視圖 | 用途 |
|---|---|
| 摘要 | 調查起點,總覽爭用分布 |
| 呼叫樹 | 聚合所有爭用堆疊 |
| 模組 | 依模組統計爭用函式 |
| 呼叫者/被呼叫者 | 三面板檢視函式關係 |
| 函式 | 所有涉爭用函式清單 |
| 行 | 原始碼行級爭用 |
| 資源詳細資訊 | 特定鎖阻塞的所有執行緒 |
| 執行緒詳細資訊 | 特定執行緒遭遇的所有鎖 |
| 爭用 | 依資源分組的呼叫樹 |
| 標記 | 使用者/自動標記與效能計數器 |
| 進程 | 進程/執行緒生命週期與爭用統計 |
| 函式詳細資訊 | 單一函式內部爭用分布 |
| IP | 爭用發生的指令位址 |
VS2010 資源爭用分析讓鎖爭用無所遁形,配合視圖切換與比較功能,能快速定位、驗證同步優化成果,是多執行緒效能調校的利器。