WPF 效能套件
Windows SDK 包含一套適用於 Windows Presentation Foundation (WPF) 應用程式的效能分析工具,稱為 WPF Performance Suite。 WPF Performance Suite 可讓您分析 WPF 應用程式的執行階段行為,並判斷可套用的效能最佳化類型。 WPF Performance Suite 包含稱為 Perforator 和 Visual Profiler 的效能分析工具。 本主題說明如何安裝及使用 WPF Performance Suite 中的 Perforator 和 Visual Profiler 工具。
此主題包括下列章節:
安裝 WPF Performance Suite
啟動 WPF Performance Suite
Perforator
Visual Profiler
下列步驟說明如何安裝 WPF Performance Suite。
如果您已經安裝舊版 Windows Performance Toolkit,請將它解除安裝。
安裝 Windows SDK。
在安裝選項中,確定選取 [Common Utilities] 下方的 [Windows Performance Toolkit] 選項。 如需下載資訊,請參閱 Windows SDK 下載網頁 (英文)。
安裝 Windows SDK 後,在 [開始] 功能表上依序選取 [所有程式]、[Microsoft Windows SDK v7.1] 和 [Tools]。
按一下 [Tools] 底下的 [Install Windows Performance Tool Kit]。
安裝精靈隨即出現。
遵循畫面上出現的指示,安裝 Windows Performance Toolkit。
預設會安裝下列功能。
Performance Analyzer
Windows Performance Toolkit Help
GPUView
WPF Performance Suite
您在執行要分析的應用程式前,應先啟動 WPF Performance Suite。 若要使用 WPF Performance Suite,您的使用者帳戶必須具有系統管理員權限。
下列步驟說明如何啟動 WPF Performance Suite。
選取 [開始] 功能表上的 [所有程式],然後選取 [Microsoft Windows Performance Toolkit]。
按一下 [WPF Performance Suite]。
如果出現 [使用者帳戶控制] 對話方塊,請按一下 [是]。
WPF Performance Suite 隨即啟動。
當您第一次啟動 WPF Performance Suite 時,會出現 [Add Tools] 對話方塊。 [Add Tools] 對話方塊可讓您加入效能分析工具。 若要加入工具,請選取工具所在的組件,然後按一下 [Scan Assembly]。 您可以隨時按一下 [File] 功能表上的 [Add Tool],開啟 [Add Tools] 對話方塊。 下圖顯示 [Add Tools] 對話方塊。
Add Tools 對話方塊
WPF Performance Suite 預設包含下列效能分析工具。
工具 |
描述 |
---|---|
Perforator |
分析轉譯行為。 |
Visual Profiler |
依視覺化樹狀結構中的項目,分析 WPF 服務的使用狀況,例如配置和事件處理。 |
確定已選取 [Perforator] 和 [Visual Profiler],然後按一下 [OK]。
Perforator 是用來分析 WPF 應用程式轉譯行為的效能分析工具。 Perforator 使用者介面會顯示一組圖形,供您用來分析應用程式某些部分的特定轉譯行為,例如新舊交混矩形增加率和畫面播放速率。 WPF 使用一種轉譯技術,稱為新舊交混矩形 (Dirty Rectangle),意思是在轉譯新的畫面時,只會轉譯有所變動的畫面部分。 此外,Perforator 還有數個選項,供您用來尋找特定的轉譯問題。 Perforator 也會報告軟體轉譯目標,並有一個滑桿可以控制圖形持續期間。 下圖顯示 Perforator 使用者介面。
Perforator 使用者介面
若要使用 Perforator,請啟動您想分析的 WPF 應用程式。 應用程式啟動之後,依序按一下 [Perforator] 索引標籤、[Actions] 功能表,以及 [Select Process]。 在 [Select Process] 對話方塊中,選取您要分析的應用程式處理序,然後按一下 [Select]。 處理序名稱和處理序 ID 現在應該會出現在 [Perforator] 索引標籤的頂端。 選取您要分析的轉譯選項。 Perforator 資料值 (例如畫面播放速率) 將會立即反映該應用程式的轉譯行為。 下圖顯示範例。
已選取應用程式和轉譯選項的 Perforator
畫面播放速率、新舊交混矩形增加率和中繼轉譯目標的數目必須保持低數值,WPF 應用程式才能有效率地轉譯。 Perforator 提供許多有用圖形來監視這些水準。
下表描述每一個圖形報告的度量資訊。
記錄圖形 |
描述 |
備註 |
---|---|---|
Frame Rate |
報告應用程式轉譯到畫面的速率。 |
對於沒有動畫的應用程式,此值應該接近 0。 效能良好的應用程式在執行動畫期間,Frame Rate 應該會接近監視器的重新整理頻率 (通常是 60 或 75)。 |
Dirty Rect Addition rate |
代表每個畫面 WPF 必須更新多少個矩形區域。 |
新舊交混矩形是一種轉譯技術,只會轉譯有所變動的畫面部分。 值很高的話,表示正在變更很多區域。 單就這個值無所謂好壞,但可與應用程式的總體效能合併考量。 |
SW IRTs Per Frame |
顯示為了轉譯應用程式的單一畫面格,所需要的軟體中繼轉譯目標 (IRT) 數目。 |
IRT 是 WPF 必須配置並對其來回複製資料的高資源耗費率軟體介面。 軟體 IRT 比硬體 IRT 耗費更多資源。 IRT 的產生通常是因為在 Visual 上使用 DrawingBrush、VisualBrush、Opacity 屬性,或是在 TileBrush 上使用並排顯示模式。 如果這個數目很高 (例如大於 5),表示 WPF 執行階段正在執行大量的應用程式轉譯工作。 在支援硬體加速的電腦上,這個數目應該是 0。 否則,這個數目表示有些場景使用較慢的軟體管線進行轉譯。 |
HW IRTs Per Frame |
顯示為了轉譯應用程式的單一畫面格,所需要的硬體中繼轉譯目標 (IRT) 數目。 |
IRT 是 WPF 必須配置並對其來回複製資料的高資源耗費率軟體介面。 中繼轉譯目標的產生通常是因為在 Visual 上使用 DrawingBrush、VisualBrush 或 Opacity 屬性,或是在 TileBrush 上使用並排顯示模式。 如果這個數目很高 (例如大於 5),表示 WPF 執行階段正在執行大量的應用程式轉譯工作。 在這種情況下,您需要分析程式碼中所有用到上述項目的區域。 硬體 IRT 比軟體 IRT 較不耗費資源。 |
Video Memory Usage |
追蹤用於紋理和轉譯目標,而配置給 WPF 的大量視訊記憶體。 此度量資訊不會追蹤配置給視訊驅動程式的記憶體,或針對編譯及載入像素和頂點著色器而配置的記憶體。 |
若超過紋理記憶體的可用容量,通常將導致 WPF 轉譯邏輯切換回軟體,也會導致多重顯示器 (多重監視器) 對應用程式所需視訊記憶體容量的影響倍增。 |
Perforator 可讓您設定許多會影響應用程式即時轉譯行為的轉譯選項。 設定這些選項,可讓您查看可能引起應用程式問題的轉譯事件。 這些選項位於使用者介面的下半部。
下圖顯示 Perforator 轉譯選項。
Perforator 轉譯選項
一般而言,若要改善 WPF 應用程式的效能,應將軟體轉譯最少化,並降低中繼轉譯目標的數目。 下列章節將討論 Perforator 如何協助您達到這些目的。
由於 WPF 硬體轉譯管線的速度較其軟體轉譯管線的速度快上許多,因此以軟體轉譯的應用程式使用者介面愈少,在該應用程式進行轉譯的速度就愈快。 以軟體轉譯區域所需的時間,通常與轉譯的像素數目成正比, 所以,使用軟體管線轉譯大區域時請小心。 小區域則影響不大。
下表列出有助於偵測軟體轉譯問題的 Perforator 選項。
選項 |
描述 |
備註 |
---|---|---|
Draw software rendering with purple tint |
使用紫色調的軟體轉譯管線繪製所有轉譯區域, 包括軟體轉譯目標、軟體 3D 內容以及個別基本軟體後援。 |
WPF 硬體轉譯管線的速度,較其軟體轉譯管線的速度快上許多。 使用過多軟體轉譯通常會有問題。 可能導致此行為的範例包括將 Brush 進行太多並排,或超過視訊卡的紋理大小。 |
Draw software rendered bitmap effects with red tint |
使用紅色調繪製舊版軟體轉譯的點陣圖效果。 |
由軟體轉譯的 BitmapEffect 類別很緩慢,應避免使用。 您應使用 .NET Framework 3.5 SP1 引進的硬體轉譯的 Effect 類別。 |
下圖顯示已啟用 [Draw software rendering with purple tint] 轉譯選項的 PhotoDemo 範例應用程式。
紫色調的 PhotoDemo
由於 WPF 只會更新必要的視窗部分,因此隨時以視覺化方式呈現更新部分可能會非常有幫助。 在某些情況下,即使應用程式中沒有動畫正在進行,區域仍會持續更新。 下列選項可協助您以視覺化方式呈現更新行為。 不必要的更新對於遠端桌面、虛擬機器和類似的情況影響尤大,因為 WPF 必須透過網路傳送新點陣圖。 此外,不必要的更新也會影響膝上型電腦的電池可用時間。
選項 |
描述 |
備註 |
---|---|---|
Show dirty-region update overlay |
讓系統透過重新著色的方式,標明 WPF 對畫面所做的每一項更新。 如此您便可查看應用程式中各區域重繪的時間和位置。 |
由於 WPF 只會更新必要的視窗部分,因此隨時以視覺化方式呈現正在更新的視窗可能會非常有幫助。 如果 Frame Rate 和 Dirty Rectangle Addition Rate 不是零,但應用程式中沒有視覺項目變更時,請使用這個選項。 |
Disable dirty region support |
讓 WPF 在每次進行變更時重繪整個視窗。 |
這個選項可以用來強制整個視窗更新。 一般情況下只會重繪已變更的視窗部分。 如果啟用此選項,將會使應用程式的轉譯速度大幅減緩。 |
Clear back-buffer before rendering |
在每個繪圖作業之前先淸除應用程式視窗。 |
這是 [Show dirty-region update overlay] 的替代選項。 此選項實際上是顯示最新的新舊交混區域,而 Dirty region update overlay 則更適合查看新舊交混區域隨時間的變更情形。 |
Perforator 可以讓您停用會耗損效能的特定作業,以判斷它們是否造成應用程式的瓶頸。 透過監視應用程式畫面播放速率以及個別選取這些選項,您可以判斷如 3D 轉譯或影像調整等作業是否造成轉譯問題。 如果選取其中一個選項,畫面播放速率就因此大幅下降,您幾乎便能判定應用程式的瓶頸在哪。
選項 |
描述 |
備註 |
---|---|---|
Disable Opacity Effects |
停用可能損耗效能的不透明效果。 |
一般情況下,若要避免這個效能問題,請考慮在低階物件 (例如 Brush) 上設定不透明度,而不要在高階物件 (例如 Button) 上進行設定。 |
Disable per-primitive software fallback |
停用個別轉譯基本物件的軟體後援。 軟體中繼轉譯目標和其他軟體轉譯則不能停用。 |
大部分情況下都需要使用此選項。 請不要勾選它。 |
Disable high-quality image rescaling |
停用將大型影像調整成較小尺寸的功能。 |
可讓您查看影應用程式中像調整的效果。 如果勾選此選項便大幅降低畫面播放速率,請考慮將影像解碼成接近顯示大小的尺寸。 |
Disable 3D rendering |
停用所有的 3D 轉譯作業。 |
可讓您查看應用程式中 3D 轉譯作業的效果。 |
Visual Profiler 是一套針對視覺化樹狀結構中的項目,分析 WPF 服務 (例如配置、轉譯和動畫) 效能的工具。 分析這個工具的分析輸出,可以判斷應用程式中的哪些視覺項目可能會造成效能瓶頸。
Visual Profiler 可呈現用來建構應用程式中視覺場景之基本建置組塊內容的效能問題。 這些建置組塊包括高階物件 (例如 Button 和 TextBlock 控制項),以及低階物件 (例如 Line 和 Ellipse 項目)。 在描述效能問題時,Visual Profiler 使用的是視覺物件表示法,而不是函式名稱的呼叫圖形。 這種方法與 Windows SDK 工具 UI Spy 呈現資訊的方法十分類似。 如需詳細資訊,請參閱 UISpy.exe (UI Spy)。
若要使用 Visual Profiler,請啟動您想分析的 WPF 應用程式。 應用程式啟動之後,依序按一下 [Visual Profiler] 索引標籤、[Actions] 功能表,以及 [Select Process]。 在 [Select Process] 對話方塊中,選取您要分析的應用程式處理序,然後按一下 [Select]。 處理序名稱和處理序 ID 現在應該會出現在 [Visual Profiler] 索引標籤的頂端。
為了分析 WPF 效能問題的廣度,您必須了解基礎 WPF 服務的角色和範圍。 這些服務包括配置、轉譯和動畫。 Visual Profiler 會以圖形表示 WPF 服務在應用程式物件之間的配置情況。 例如,當 Visual Profiler 顯示應用程式物件的視覺化樹狀結構時,它會將不同深淺度的紅色網底重疊在物件上,藉以呈現物件正在使用的相對資源數量。 以深紅色重疊顯示的物件代表該物件的資源用量比例高於以淺紅色重疊的物件。 更重要的是,Visual Profiler 還提供了物件所佔用之特定 WPF 資源數量的細目。
下圖顯示 Visual Profiler 使用者介面。
Visual Profiler 使用者介面
Visual Profiler 使用者介面共有 8 個區域。
項目樹狀結構搜尋方塊
視覺化項目樹狀結構
項目詳細資料和預覽
項目專用 CPU 使用率詳細資料
應用程式 CPU 使用率詳細資料
擷取資料縮放控制項
記錄圖形顯示設定
應用程式預覽和效能覆疊的選項
下列章節將說明各區域。
[Element Tree] 區段的搜尋方塊可供您搜尋應用程式項目樹狀結構中的項目。 執行搜尋時,所有相符項目都會以黃色反白顯示。 您可以依型別或名稱來搜尋項目。
[Element Tree] 區段中的樹狀結構控制項,會顯示應用程式中視覺化項目的類型和名稱,以及樹狀子目錄大小和配置詳細資料。
下列是樹狀結構中項目標籤的範例。
Border 'border1' (26) 0.02% (I)/ 0.00 % (E) - .24 ms (I) / 0.00 ms (E)
項目標籤組件 |
描述 |
---|---|
Border |
項目的型別。 |
'border1' |
項目的名稱。 |
(26) |
樹狀子目錄大小。 |
0.02% (I) |
內含樹狀結構 (代表項目及其所有子系) 佔總大小的百分比。 |
0.00 (E) |
該項目本身佔總項目百分比。 |
.24 ms (I) |
配置項目及其子系的時間,以毫秒為單位。 |
0.00 ms (E) |
僅配置項目本身的時間,以毫秒為單位。 |
使用 [View] 功能表可以控制是否要顯示 Inclusive/Exclusive %/time 資訊。
以滑鼠右鍵按一下項目,可展開或摺疊樹狀子目錄。 您也可以展開其 Hotpath。 Hotpath 會顯示樹狀子目錄中,CPU 消耗量最多的項目。
[Element Information] 區段會顯示目前選取之項目的類型和名稱 (如果已為該項目命名)。 同時也在 [Preview] 區段中提供項目預覽。 如果選取了最上層的項目,則預覽會顯示應用程式的預覽。
[Element Exclusive CPU Usage] 區段會專門顯示所選取項目隨時間消耗 CPU 時間的記錄圖形和詳細資料。 例如,某個項目可能花費 x% 的 CPU 時間於配置排列、y% 的 CPU 時間於配置測量,以及 z% 的 CPU 時間於轉譯。
[Application CPU Usage] 區段會顯示應用程式事件的記錄圖形和詳細資料。 Visual Profiler 會接聽並擷取各種應用程式事件。 隨著應用程式事件會列出絕對值,而記錄圖形則以不同顏色顯示每個應用程式事件隨時間花費的 CPU 時間。 這樣可以讓您輕鬆比對應用程式在配置和轉譯兩方面花費的時間。
下表描述圖形中呈現的應用程式事件。
![]() |
---|
與 WPF 中的方法呼叫對應的事件,會以方法名稱後面加上以括號括住的類別名稱來表示。例如 Tick (TimeManager) 即代表 TimeManager.Tick 方法。 |
應用程式事件 |
描述 |
---|---|
Unlabeled Time |
WPF 中花費的時間,該時間未分類在其他應用程式事件中,而該應用程式花費的所有時間都在 WPF 外部 |
RenderMessageHandler (MediaContext) |
啟始轉譯行程時發生。 這個事件會造成時間管理員跳動一次,以及其他動作。 |
Rendering Thread |
在對轉譯執行緒執行轉譯指令時發生。 這可用來偵測轉譯繫結應用程式。 |
Layout |
在測量、排列及轉譯行程期間發生。 |
UpdateRealizations |
在更新文字及點陣圖效果的內部點陣圖表示時發生。 |
Tick (TimeManager) |
在動畫播放時發生。 這個事件可以觸發動畫轉譯處理常式。 當您在 WPF 中將物件顯示為動畫,「時間管理員」(Time Manager) 會管理針對時刻表建立的 Clock 物件。 時間管理員是 Clock 物件的樹狀目錄的根,控制了這個樹狀目錄中的時間流程。 每個 WPF 應用程式都會自動建立時間管理員,而且應用程式開發人員看不見時間管理員。 時間管理員每秒「跳動」許多次。 每秒跳動的實際次數依可用的系統資源而異。 |
AnimatedRenderMessageHandler (MediaContext) |
處理及更新動畫時發生。 啟用動畫時,此處理常式便會處理及更新動畫,因此會造成屬性變更,並進行轉譯。 |
Render (MediaContext) |
在轉譯行程期間發生。 這個方法最後會呼叫每個項目的 OnRender 方法,而且對於了解所有項目的 OnRender 總成本非常有幫助。 這個事件對應於 Visual Studio Profiler (VSP) 檔案中的 MediaContext.Render 方法。 |
[Graph Options] 區段含有一個擷取資料縮放控制項。 透過拖曳縮放視窗控點,您可以調整 Element Exclusive CPU Usage 和 Application CPU Usage 記錄圖形之時間軸的大小,以及加以變更該時間軸。
[Graph Options] 區段包含選項按鈕和滑桿,可以調整記錄圖形設定。 您可以使用選項按鈕指定 CPU 軸 (垂直軸) 的作用方式:顯示絕對或相對權重。 您可以使用滑桿設定圖形的最大顯示值。
[Control Options] 區段包含 3 個切換按鈕,可以執行下列動作。
按第一個切換按鈕可暫停或啟動 Visual Profiler 資料收集。
按一下 [Live Preview] 切換按鈕可在 [Preview] 區段中顯示應用程式的即時預覽。
按一下 [Overlay Window] 切換按鈕可在所選取視覺化項目周圍加上黃色框線。 此外,對於消耗最多 CPU 時間的項目,還會加上紅色重疊顯示。 [Element Tree] 區段中也會對項目使用同樣的紅色顯示。 紅色的濃度與 CPU 使用程度有關。