WPF 效能套件
Windows SDK 包含 Windows Presentation Foundation (WPF) 應用程式的一套效能剖析工具,稱為 WPF 效能套件。 WPF 效能套件可讓您分析 WPF 應用程式的執行階段行為,並判斷您可以將套用的效能最佳化。 WPF 效能套件包含效能剖析工具,稱為 Perforator 和 Visual Profiler。 本主題描述如何安裝和使用 WPF 效能套件中的 Perforator 和 Visual Profiler 工具。
此主題包括下列章節:
安裝 WPF 效能套件
啟動 WPF 效能套件
Perforator
Visual Profiler
安裝 WPF 效能套件
下列步驟描述如何安裝 WPF 效能套件。
如果您已安裝舊版 Windows 效能工具組,請將之解除安裝。
安裝 Windows SDK。
在安裝選項中,請確定您在 [常用的公用程式] 下選取 [Windows 效能工具組] 選項。 如需下載資訊,請參閱 Windows SDK 下載頁面。
在安裝 Windows SDK 之後,請在 [開始] 功能表上,依序選取 [所有程式]、[Microsoft Windows SDK 7.1 版] 和 [工具]。
在 [工具] 下,按一下 [安裝 Windows 效能工具組]。
安裝精靈隨即顯示。
請依照出現的指示來安裝 Windows 效能工具組。
依預設,會安裝下列功能。
效能分析程式
Windows 效能工具組說明
GPUView
WPF 效能套件
啟動 WPF 效能套件
在執行您想要剖析的應用程式之前,應該啟動 WPF 效能套件。 您的使用者帳戶必須具有系統管理權限,才能使用 WPF 效能套件。
下列步驟描述如何開始 WPF 效能套件。
在 [開始] 功能表上,選取 [所有程式],然後選取 [Microsoft Windows 效能工具組]。
按一下 [WPF 效能套件]。
如果顯示 [使用者帳戶控制] 對話方塊,按一下 [是]。
WPF 效能套件隨即啟動。
第一次啟動 WPF 效能套件時,[加入工具] 對話方塊會出現。 [加入工具] 對話方塊可讓您加入效能剖析工具。 若要加入工具,請選取包含工具的組件,然後按一下 [掃描組件]。 您可以從 [檔案] 功能表按一下 [加入工具],隨時開啟 [加入工具] 對話方塊。 下圖顯示 [加入工具] 對話方塊。
[加入工具] 對話方塊
依預設,WPF 效能套件包含下列效能剖析工具。
工具 |
描述 |
---|---|
Perforator |
分析呈現行為。 |
Visual Profiler |
剖析 WPF 服務的使用情形,例如視覺化樹狀目錄中由項目處理的配置和事件。 |
請確定已選取 [Perforator] 和 [Visual Profiler] 核取方塊,然後按一下 [確定]。
Perforator
Perforator 是效能剖析工具,用於分析 WPF 應用程式的呈現行為。 Perforator 使用者介面會顯示一組圖形,可讓您分析應用程式各部分中非常特定的轉譯行為,例如已變更矩形新增速率及畫面播放速率。 WPF 會使用稱為已變更矩形的呈現技術,這表示只有部分已變更的螢幕會呈現在新的呈現階段上。 此外,Perforator 也提供數個選項,可讓您用於尋找特定的呈現問題。 Perforator 也會報告軟體呈現目標和滑桿來控制圖形的持續時間。 下圖顯示 Perforator 使用者介面。
Perforator 使用者介面
使用 Perforator
若要使用 Perforator,請啟動您想要分析的 WPF 應用程式。 一旦應用程式啟動後,請依序按一下 [Perforator] 索引標籤、[動作] 功能表和 [選取處理序]。 在 [選取處理序] 對話方塊中,選取您想要分析的應用程式處理序,然後按一下 [選取]。 處理序名稱和處理序識別碼現在應該會出現在 [Perforator] 索引標籤頂端。 選取您想要分析的呈現選項。 Perforator 資料值 (例如畫面播放速率) 會立即反映應用程式的呈現行為。 下圖顯示一個範例。
已選取應用程式和呈現的 Perforator
Perforator 圖形
重要的是保持低的畫面播放速率、已變更矩形新增速率和中繼呈現目標數目,如此 WPF 應用程式才能有效呈現。 Perforator 有許多實用圖形,可用來監視這些層級。
下表描述每個圖形所報告的度量。
歷程記錄圖形 |
描述 |
附註 |
---|---|---|
畫面播放速率 |
報告應用程式呈現至螢幕的速率。 |
對於沒有動畫的應用程式,此值應該接近 0。 在執行良好的應用程式中播放動畫期間,畫面播放速率應該接近監視器的更新率 (通常為 60 或 75)。 |
已變更矩形新增速率 |
指出 WPF 必須更新每一個畫面的多少矩形區域。 |
已變更矩形指的是呈現技巧,只呈現已變更的螢幕部分。 高值指出有大量區域正在變更。 這不一定是好或壞,但此值必須考量您應用程式的整體效能。 |
每格畫面的 SW IRT |
顯示呈現應用程式一格畫面所需的軟體中繼呈現目標 (IRT )數目。 |
IRT 是昂貴的軟體介面,WPF 必須在其中配置和複製資料。 硬體 IRT 比軟體 IRT 更便宜。 導致 IRT 的原因通常是在 Visual 上使用 DrawingBrush、VisualBrush、Opacity 屬性,或是在 TileBrush 上使用並排顯示模式。 如果這個數字很高 (例如,大於 5),則表示 WPF 執行階段正在執行大量的工作來呈現您的應用程式。 在支援硬體加速的電腦上,這個數字應該是 0。 否則,這個數字表示會使用速度較慢的軟體管線呈現您的某些場景。 |
每格畫面的 HW IRT |
顯示呈現應用程式一格畫面所需的硬體中繼呈現目標 (IRT )數目。 |
IRT 是所費不貲的硬體介面,WPF 必須在其中配置和複製資料。 導致中繼呈現目標的原因通常是在 Visual 上使用 DrawingBrush、VisualBrush 或 Opacity 屬性,或是在 TileBrush 上使用並排顯示模式。 如果這個數字很高 (例如,大於 5),則表示 WPF 執行階段正在執行大量的工作來呈現您的應用程式。 在此情況下,您必須分析程式碼中使用先前所述項目的所有區域。 硬體 IRT 比軟體 IRT 便宜。 |
視訊記憶體使用量 |
追蹤由於紋理和呈現目標而配置大量視訊記憶體給 WPF 的情形。 此度量不會追蹤視訊驅動程式的記憶體配置,或用於編譯和載入像素和頂點著色器的記憶體配置。 |
超過可用的紋理記憶體數量,通常會造成 WPF 呈現邏輯改為使用軟體,以致多部顯示器 (多重監視器) 對應用程式所需的視訊記憶體數量的影響倍增。 |
Perforator 呈現選項和最佳化呈現
Perforator 可讓您設定多個呈現選項,影響應用程式的即時呈現行為。 設定這些選項可讓您查看應用程式中可能有問題的呈現事件。 這些選項可在使用者介面的下半部找到。
下圖顯示 Perforator 呈現選項。
Perforator 呈現選項
一般而言,若要改善 WPF 應用程式的效能,您應該將軟體呈現降至最低,並降低中繼呈現目標的數目。 下列各節會討論 Perforator 如何協助您執行這項操作。
避免軟體呈現
因為 WPF 硬體呈現管線比起其軟體呈現管線快得多,所以軟體中呈現的應用程式使用者介面越少,該應用程式中的呈現速度將更越快。 一般而言,在軟體中呈現區域所花費的時間與呈現的像素數目成正比。 因此,在使用軟體管線呈現大型區域時請小心。 小型區域則比較無所謂。
下表列出可協助偵測軟體呈現問題的 Perforator 選項。
選項 |
描述 |
附註 |
---|---|---|
繪製搭配紫色濃淡的軟體呈現 |
使用軟體呈現管線與紫色濃淡搭配,來繪製所有呈現的區域。 這包括軟體呈現目標、軟體 3D 內容,以及每個基本軟體後援。 |
WPF 硬體呈現管線的速度大幅超過軟體呈現管線。 過多的軟體呈現通常表示有問題。 造成這種行為的範例包括並排顯示 Brush 太多或超過視訊卡的紋理大小。 |
繪製搭配紅色濃淡的軟體呈現點陣圖效果 |
繪製搭配紅色濃淡的舊版軟體呈現點陣圖效果。 |
軟體呈現的 BitmapEffect 類別很慢,因此應該予以避免。 您應該使用硬體呈現的 Effect 類別,已在 .NET Framework 3.5 SP1 中導入。 |
下圖顯示在啟用 [繪製搭配紫色濃淡的軟體呈現] 呈現選項的情況下的 PhotoDemo 範例應用程式。
搭配紫色濃淡的 PhotoDemo
監視已變更區域
因為 WPF 只會視需要更新部分視窗,所以隨時視覺化更新可能很有幫助。 在某些情況下,雖然沒有動畫發生在應用程式中,但是區域將持續更新。 下列選項可協助視覺化更新行為。 當 WPF 必須透過網路傳送新的點陣圖時,遠端桌面、虛擬機器和類似案例中的不必要更新非常重要。 此外,不必要的更新可能會影響膝上型電腦的電池壽命。
選項 |
描述 |
附註 |
---|---|---|
顯示已變更區域更新重疊 |
導致重新著色指出對螢幕所做的每一個 WPF 更新。 這可讓您查看應用程式中重新繪製區域的時間和位置。 |
因為 WPF 只會視需要更新部分視窗,所以隨時視覺化正在更新的視窗部分很有幫助。 當畫面播放速率和已變更矩形新增速率不是零時,請使用此選項,但沒有視覺效果正在您的應用程式中變更。 |
停用已變更區域支援 |
導致只要進行變更,WPF 就會重新繪製整個視窗。 |
此選項有助於強制整個視窗更新。 一般而言,只會重新繪製已變更的視窗部分。 啟用此選項會導致應用程式的呈現速度變慢很多。 |
呈現之前清除後緩衝區 |
在每個繪圖作業之前清除應用程式視窗。 |
此選項是 [顯示已變更區域更新重疊] 的替代選項。 實際上它會顯示最新的已變更區域,而已變更區域更新重疊,更有助於查看已變更區域在一段時間後的變更。 |
偵測效能降低的其他來源
Perforator 可讓您停用特定效能耗用作業,來判斷它們是否會在應用程式中造成瓶頸。 藉由監視應用程式畫面播放速率,並個別選取這些選項,您可以判斷作業 (例如 3D 呈現或影像大小調整) 是否會造成呈現問題。 如果您選取其中一個選項,而且畫面播放速率大幅降低,則您可能已識別應用程式中的瓶頸。
選項 |
描述 |
附註 |
---|---|---|
停用不透明效果 |
停用某些可能使用大量效能的不透明度。 |
一般來說,若要避免這個效能問題,請考慮在低階物件上設定不透明度 (例如 Brush),而不是高階物件 (例如 Button)。 |
停用每個基本軟體後援 |
停用個別呈現基本物件的軟體後援。 軟體中繼呈現目標和其他軟體呈現無法停用。 |
在大部份情況下,都不需要這個選項。 將它保持取消核取的狀態。 |
停用高品質影像大小調整 |
停用將大型影像調整為較小的大小。 |
可讓您在應用程式中看到調整影像大小後的效果。 如果選取這個選項會大幅降低畫面播放速率,請考慮將影像解碼成接近將顯示它們的大小。 |
停用 3D 呈現 |
停用所有 3D 呈現作業。 |
可讓您在應用程式中看到 3D 呈現作業的效果。 |
Visual Profiler
Visual Profiler 是 WPF 服務的效能剖析工具,例如版面配置、呈現和動畫,適用於視覺化樹狀目錄中的項目。 藉由分析此工具的剖析輸出,您可以判斷應用程式中的哪些視覺項目可能會造成效能瓶頸。
Visual Profiler 會呈現基本建置組塊之內容中的效能問題,這些組塊是用來在您的應用程式中建構視覺化場景。 這些建置組塊包括高階物件 (例如 Button 和 TextBlock 控制項),以及低階物件 (例如 Line 和 Ellipse 項目)。 Visual Profiler 會使用視覺化物件的表示法描述這些問題,而不是以函式名稱的呼叫圖形描述效能問題。 此方式類似於 Windows SDK 工具 (UI Spy) 代表資訊的方式。 如需詳細資訊,請參閱 UISpy.exe (UI Spy)。
使用 Visual Profiler
若要使用 Visual Profiler,請啟動您想要分析的 WPF 應用程式。 一旦應用程式啟動後,請依序按一下 [Visual Profiler] 索引標籤、[動作] 功能表和 [選取處理序]。 在 [選取處理序] 對話方塊中,選取您想要分析的應用程式處理序,然後按一下 [選取]。 處理序名稱和處理序識別碼現在應該會出現在 [Visual Profiler] 索引標籤頂端。
若要分析 WPF 效能問題的廣度,您必須了解基礎 WPF 服務的角色和範圍。 這些服務包括配置、呈現和動畫。 Visual Profiler 提供如何在應用程式物件之配置 WPF 服務的圖形表示法。 例如,當 Visual Profiler 顯示應用程式物件的視覺化樹狀目錄時,它會使物件上不同的紅色陰影重疊,以便代表物件正在使用的相對資源數量。 以深紅色重疊顯示的物件會比以淺紅色重疊顯示的物件,使用更高比例的資源。 更重要的是,Visual Profiler 提供物件所耗用之特定 WPF 資源數量的解析。
下圖顯示 Visual Profiler 使用者介面。
Visual Profiler 使用者介面
Visual Profiler 使用者介面有八個區域。
項目樹狀目錄搜尋方塊
視覺項目樹狀目錄
項目詳細資料和預覽
項目獨佔 CPU 使用量詳細資料
應用程式 CPU 使用量詳細資料
擷取的資料縮放控制項
歷程記錄圖形顯示設定
應用程式預覽和效能重疊的選項
下列各節描述每一個區域。
項目樹狀目錄搜尋方塊
[項目樹狀目錄] 區段中的搜尋方塊,可讓您在應用程式的項目樹狀目錄中搜尋項目。 執行搜尋時,所有相符項目會以黃色反白顯示。 您可以依其類型或名稱搜尋項目。
視覺項目樹狀目錄
[項目樹狀目錄] 區段中的樹狀目錄控制項會顯示應用程式中視覺項目的類型和名稱,以及樹狀子目錄大小和配置詳細資料。
下列是樹狀目錄中項目標籤的範例。
框線 '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) |
僅配置項目的時間, 以毫秒為單位。 |
使用 [檢視] 功能表來控制是否顯示內含/排除 %/時間資訊。
在項目上按一下滑鼠右鍵,以展開或摺疊樹狀子目錄。 您也可以展開其最忙碌路徑。 最忙碌路徑顯示樹狀子目錄中耗用最多 CPU 資源的項目。
項目詳細資料和預覽
如果項目已命名,[項目資訊] 區段顯示目前選取的項目類型和名稱。 它也會在 [預覽] 區段中提供項目的預覽。 如果選取最上層項目,預覽會顯示應用程式的預覽。
項目獨佔 CPU 使用量詳細資料
[項目獨佔 CPU 使用量] 區段會顯示所選取項目一段時間後所耗用之獨佔 CPU 時間的歷程記錄圖形和詳細資料。 例如,項目可能會在配置排列上花費 x %CPU 時間、在配置測量上花費 y %,以及在呈現上花費 z %。
應用程式 CPU 使用量詳細資料
[應用程式 CPU 使用量] 區段顯示應用程式事件的歷程記錄圖形和詳細資料。 Visual Profiler 會接聽並擷取各種應用程式事件。 應用程式事件會與絕對值一起列出,而且歷程記錄圖形會以不同色彩顯示每個應用程式事件在一段時間後所花費的 CPU 時間。 這可讓您輕鬆地查看應用程式花在配置與呈現的時間。
下表描述顯示在圖表的應用程式事件。
注意事項 |
---|
那些對應至 WPF 中方法呼叫的事件是以方法名稱表示,後面接著以括號括住的類別名稱。例如,[滴答 (TimeManager)] 代表 TimeManager.Tick 方法。 |
應用程式事件 |
描述 |
---|---|
未標記的時間 |
未在另一個應用程式事件中分類之 WPF 中花費的時間,應用程式在 WPF 應用程式外花費的所有時間 |
RenderMessageHandler (MediaContext) |
在起始呈現階段時發生。 這個事件會致使時間管理員在其他事件之間發出滴答聲。 |
呈現執行緒 |
在呈現執行緒上執行呈現指令時發生。 這是適用於偵測呈現繫結的應用程式。 |
配置 |
在測量、排列和呈現階段期間發生。 |
UpdateRealizations |
更新文字和點陣圖效果的內部點陣圖表示法時發生。 |
Tick (TimeManager) |
在動畫播放時發生。 這個事件可以觸發動畫呈現處理常式。 當您在 WPF 中建立動畫物件時,時間管理員會管理針對時間表建立的 Clock 物件。 時間管理員為 Clock 物件樹狀目錄的根目錄,並控制該樹狀目錄中的時間流程。 會為每一個 WPF 應用程式自動建立時間管理員,而且應用程式開發人員看不到時間管理員。 時間管理員每秒「滴答」多次。 每秒發生的實際滴答數目會有所不同,視可用的系統資源而定。 |
AnimatedRenderMessageHandler (MediaContext) |
動畫處理和更新時發生。 動畫啟用時,此處理常式會處理並更新導致屬性變更和呈現的動畫。 |
Render (MediaContext) |
呈現階段期間發生。 這個方法最後會呼叫每個項目的 OnRender 方法,而且有助於了解所有項目的 OnRender 的總成本。 這個事件會對應至 Visual Studio 分析工具 (VSP) 檔案中的 MediaContext.Render 方法。 |
擷取的資料縮放控制項
[圖形選項] 區段包含擷取資料縮放控制項。 藉由拖曳縮放視窗控制代碼,您可以調整大小,並變更項目獨佔 CPU 使用量和應用程式 CPU 使用量歷程記錄圖形的時間軸。
歷程記錄圖形顯示設定
[圖形選項] 區段包含選項按鈕和滑桿來調整歷程記錄圖形設定。 您可以使用選項按鈕來指定 CPU 軸,垂直軸的行為;它是否會顯示絕對或相對加權。 您可以使用滑桿來設定圖形的最大顯示值。
應用程式預覽和效能重疊的選項
[控制選項] 區段包含三個執行下列動作的切換按鈕。
按一下第一個切換按鈕,即可暫停或啟動 Visual Profiler 資料收集。
按一下 [即時預覽] 切換按鈕,即可在 [預覽] 區段中顯示應用程式的即時預覽。
按一下 [重疊視窗] 切換按鈕,即可在選取的視覺項目周圍加入黃色框線。 同時,對於耗用最多 CPU 時間的項目,會加入紅色重疊。 相同的紅色用於 [項目樹狀目錄] 區段中的項目。 紅色的濃度與 CPU 使用量相關。