收集內容切換資料
若要分析內容切換,您需要收集每次內容切換的呼叫堆疊。若要收集呼叫堆疊,請在開始擷取之前確認已選取 Callstacks on context switches 核取方塊 (圖 1)。此核取方塊預設為已選取。 圖 1. Start Timing Capture 的 Options 窗格。
尋找停滯與內容切換
根據預設,內容切換會在時間軸的執行緒與核心通道中顯示為小型的紅色垂直線。執行緒未執行的時段,稱為「未排程執行緒時間」或「停滯」,預設會以交叉陰影圖樣繪製。每個停滯的開頭都以切出的內容切換為界,結尾則以切回的內容切換為界。內容切換與停滯的預設視覺效果如圖 2 所示。 圖 2. 內容切換與停滯的預設視覺效果。

UpdatePlayerArmor 之事件的一個執行個體,該執行個體有八次停滯。
圖 4. 顯示所選事件的停滯。


分析停滯與內容切換
在 Timeline 或 Range Details 檢視中選取內容切換,會在 Element Details 檢視中填入該內容切換的相關資訊。Element Details 會顯示發生切換的核心、切換發生的時間,以及切換前正在執行之執行緒與切換後正在執行之執行緒 (若有) 的呼叫堆疊。也會顯示每個執行緒的執行緒親和性與優先順序資料。圖 6 顯示遊戲的AppMain 執行緒呼叫 Win32 API ReadFile 造成內容切換。呼叫之後,AppMain 從執行中轉換為閒置。
圖 6. 內容切換的詳細資料。

AppMain 執行緒,而 AppMain 是由名為 Worker 的執行緒設為就緒。Element Details 檢視包括設為就緒之執行緒的呼叫堆疊、就緒時間與就緒原因。在時間軸中,會有一個箭號從設為就緒的執行緒 (Worker) 延伸到現在正在執行的執行緒 (AppMain)。
圖 7. 設為就緒之執行緒的詳細資料。

AP1 的遊戲執行緒。在此案例中,等候原因指出此切換是因作業系統的執行緒排程器而發生。
圖 8. 從非遊戲處理程序切出之內容切換的詳細資料。


