Share via


分析 Windows 市集應用程式中 Visual C++、Visual C# 和 Visual Basic 程式碼的效能資料

本主題說明在 Microsoft Visual Studio Express 2012 for Windows 8 分析工具的報告檢視中顯示的 Visual C++、Visual C# 與 Visual Basic 程式碼的效能資料。若要收集 Visual C++、Visual C# 與 Visual Basic 的效能資料,請參閱下列其中一個主題:

本主題內容

本主題包含下列章節:

開啟分析報告檔案

效能資料的類型

Just My Code

效能報告檢視的類型

效能報告檢視

  • 摘要檢視

  • 函式詳細資料檢視

  • 呼叫樹狀圖檢視

  • 呼叫端/被呼叫端檢視

  • 模組與函式檢視

  • 程式行檢視

自訂資料格檢視

開啟分析報告檔案

當您從 Visual Studio IDE 停止分析執行時,效能資料會自動顯示在文件中。

若要開啟由 VSPerf 命令列工具產生、或在前次執行分析後儲存的分析報告 (.vspx) 檔案,請執行下列作業:

  1. 如有需要,請開啟 Visual Studio。

  2. 在 [檔案] 功能表上,選擇 [開啟檔案]。

  3. 在 [開啟檔案] 對話方塊中,巡覽至包含分析報告檔案的資料夾,然後選擇報告檔案。

效能資料的類型

Visual Studio Express 2012 for Windows 8 分析工具會使用取樣技術,收集 Visual C++、Visual C# 和 Visual Basic 程式碼的效能資料。分析工具會依照以處理器時脈為基礎的間隔,擷取目前作用中函式的快照 -「呼叫堆疊」(Call Stack)。呼叫堆疊上的作用中函式會執行本身的程式碼,或等待它所呼叫的函式執行。對於取樣的呼叫堆疊,分析工具會為其中的每個函式指派取樣值,如下所示:

  • 如果函式執行本身主體中的程式碼 (而不是子函式中的程式碼),則函式的 [內含] 和 [專有] 樣本計數都會增加。

  • 如果函式會等待子函式傳回,則只有函式的 [內含] 樣本計數會增加。

函式的分析資料包含針對函式所收集的樣本絕對數目,以及這些樣本數與執行分析時收集的樣本總數比較下的相對百分比。計算兩組時間值的這項資料:

  • 從函式位於呼叫堆疊上時爲該函式收集的樣本總數 (包含在執行子函式時所收集的樣本數在內),可計算出 [內含] 值。在分析取樣的呼叫堆疊時,呼叫堆疊上所有函式的內含樣本計數都會增加。

  • 從函式執行本身的程式碼時為該函式收集的樣本總數,可計算出 [專有] 值。專有值不包含執行子函式時所收集的樣本數。在分析取樣的呼叫堆疊時,只有執行本身函式主體中之程式碼的函式,會增加專有樣本計數。

效能報告檢視的類型

分析報告檢視可透過兩種方式顯示資料:

  • 呼叫圖形檢視會顯示執行路徑內容中各函式的相關資訊。

    • [摘要] 視窗上的 [最忙碌路徑] 樹狀目錄,會顯示有最多的樣本在執行分析時耗用最多時間的執行路徑。

    • [呼叫樹狀圖] 檢視是執行分析時所取樣之所有執行路徑的呼叫圖形。

    • [函式詳細資料] 和 [呼叫端/被呼叫端] 檢視著重在選取的函式,顯示呼叫選取函式的函式,以及選取函式呼叫的函式。

    呼叫圖形檢視可以協助您找到演算法的效能問題。

  • 函式清單檢視會顯示表格中各函式的資料效能資料。您可以選擇資料行,以排序函式。

    • [摘要] 頁面上的 [含有最多個別工作的函式] 清單,會顯示在執行分析時收集最多專有樣本的函式。

    • [模組] 檢視會依據包含函式的 .dll 或 .exe 檔案對函式進行分組。

    • [函式] 檢視是一份函式清單。

    • [程式行] 檢視會顯示收集樣本時所執行之函式陳述式的效能資料。

您可以選取函式,然後從 [目前的檢視] 下拉式清單中選擇新檢視,在不同的檢視之間巡覽。

Just My Code

根據預設,分析工具在建立報告時會使用 Just My Code 功能。當分析工具分析呼叫堆疊資訊時,它會判斷呼叫堆疊上的函式是您的程式碼的成員還是系統程式碼的成員,例如 .NET 基底類別庫中的方法。在啟用 [Just My Code]、且函式是對系統程式碼的呼叫時,分析工具分析會將所有針對呼叫堆疊收集的後續樣本加入至第一個系統呼叫的專有和內含值中。因此,系統呼叫會彙總到第一個系統呼叫中,這可以協助您專注於對自己的程式碼進行最佳化。

若要變更預設的 Just My Code 行為,並檢視所有對系統呼叫的呼叫,請執行下列作業:

  1. 在 [工具] 功能表上,選擇 [選項]。

  2. 在 [選項] 對話方塊中選擇 [效能工具],然後選擇 [一般]。

  3. 在 [Just My Code] 群組中,清除 [啟用 Just My Code 以進行分析工具報告 (取樣)] 核取方塊。

效能報告檢視

Hh780914.collapse_all(zh-tw,VS.110).gif摘要檢視

[摘要] 頁面會顯示兩個分析資料檢視,通常可為您指出最適用於效能最佳化的候選項目。

  • [最忙碌路徑] 樹狀目錄會顯示在執行分析時具有最多樣本數的呼叫堆疊。了解此演算法為何會如此耗時,有助於最佳化的進行。

  • [含有最多個別工作的函式] 清單會顯示十個使用了最多專有時間的函式。藉由函式程式碼的最佳化或減少這些函式的呼叫次數,可讓您快速而大幅地提高效能。

若要開啟函式的 [函式詳細資料] 檢視,請選擇 [摘要] 檢視中的函式名稱。

Hh780914.collapse_all(zh-tw,VS.110).gif函式詳細資料檢視

[成本分配] 橫條圖表示您選取的函式與執行所選函式的呼叫函式之間的關聯性,以及所選函式與它所呼叫的函式之間的關聯性。

  • [呼叫函式] 列會顯示呼叫所選取函式的函式。呼叫函式區塊的大小,表示呼叫函式引發之所選取函式的總執行時間百分比。

  • [選取的函式] 列表示選取的函式執行本身的程式碼時所耗費的相對總執行時間量 ([函式主體] 區塊),以及執行所選取函式呼叫的函式時所耗費的時間量。

  • [所呼叫函式] 列會顯示選取的函式所呼叫的函式。所呼叫函式區塊的大小,表示所呼叫函式耗費在所呼叫函式中的總執行時間百分比。

您可以選擇以呼叫函式或所呼叫函式作為選取的函式。

Hh780914.collapse_all(zh-tw,VS.110).gif呼叫樹狀圖檢視

您可以使用 [呼叫樹狀圖] 檢視瀏覽在您的應用程式中周遊的函式執行路徑。樹狀圖的根是應用程式的進入點。每個函式節點會列出它所呼叫的所有函式,以及這些函式呼叫的相關效能資料。[呼叫樹狀圖] 檢視中的函式值,適用於呼叫樹狀圖中父函式所呼叫的函式執行個體。百分比值是函式執行個體的時間值與分析總執行時間的比例。

若要將焦點放在 [呼叫樹狀圖] 檢視中的某個節點上,請先選擇該節點,然後在捷徑功能表上選擇 [設定根目錄]。設定根節點時,除了所選取節點的樹狀子目錄以外,請從檢視中排除所有其他的項目。若要將根節點重設為原始節點,請在捷徑功能表上選擇 [重設根目錄]。

呼叫樹狀圖檢視資料行

資料行名稱

描述

內含樣本

針對呼叫樹狀圖中的父函式所呼叫的函式執行個體收集的樣本數目。此樣本數目包含針對函式所呼叫的函式收集的樣本。

專有樣本

針對呼叫樹狀圖中的父函式所呼叫的函式執行個體收集的樣本數目。此樣本數目不包含針對函式所呼叫的函式收集的樣本。

內含樣本百分比

在執行分析時,針對父函式所呼叫的函式執行個體收集的樣本總數百分比。此値包含針對函式所呼叫的函式收集的樣本。

專有樣本百分比

在執行分析時,針對父函式所呼叫的函式執行個體收集的樣本總數百分比。此値不包含針對函式所呼叫的函式收集的樣本。

模組名稱

包含函式的模組名稱 (.dll 或 .exe)。

Hh780914.collapse_all(zh-tw,VS.110).gif呼叫端/被呼叫端檢視

[呼叫端/被呼叫端] 檢視會以樹狀結構顯示包含所有時間詳細資訊之 [函式詳細資料成本分配] 橫條圖中的資料。使用 [呼叫端/被呼叫端] 檢視,可調查選取的函式與呼叫選取函式之函式之間,以及選取的函式與它所呼叫的函式之間的關聯性。[呼叫端/被呼叫端] 檢視由三個方格所組成。

顯示於中間方格的 [目前的函式],會顯示所選取函式的分析資訊。這些值包含來自所有函式呼叫的樣本。[呼叫目前函式的函式] 顯示於上方的方格,[目前的函式所呼叫的函式] 顯示於下方的方格。目前函式的值是對函式之所有取樣呼叫的總計。呼叫和所呼叫函式的值,僅包含呼叫選取的函式或被其呼叫時針對函式收集的樣本。

若要巡覽函式的呼叫樹狀圖,請按兩下呼叫或所呼叫函式。這會讓選取的函式成為新的選取函式,並指出它的呼叫端與所呼叫函式。

呼叫端/被呼叫端檢視資料行

資料行名稱

描述

內含樣本

  • 就選取的函式而言,這是針對選取的函式收集的樣本總數。此値包含針對選取的函式所呼叫的函式收集的樣本。

  • 就呼叫函式而言,這是在執行分析時,針對呼叫選取的函式的呼叫函式執行個體收集的樣本數目。此値包含針對呼叫函式所呼叫的函式收集的樣本。

  • 就所呼叫函式而言,這是在執行分析時,針對被選取的函式呼叫的所呼叫函式執行個體收集的樣本數目。此値包含針對所呼叫函式呼叫的函式收集的樣本。

專有樣本

  • 就選取的函式而言,這是針對選取的函式收集的樣本總數。此値不包含針對選取的函式所呼叫的函式收集的樣本。

  • 就呼叫函式而言,這是在執行分析時,針對呼叫選取的函式的呼叫函式執行個體收集的樣本數目。此値不包含針對呼叫函式所呼叫的函式收集的樣本。

  • 就所呼叫函式而言,這是在執行分析時,針對被選取的函式呼叫的所呼叫函式執行個體收集的樣本數目。此値不包含針對所呼叫函式呼叫的函式收集的樣本。

內含樣本百分比

  • 就選取的函式而言,這是在執行分析時,針對選取的函式收集的樣本總數百分比。此値包含針對選取的函式所呼叫的函式收集的樣本。

  • 就呼叫函式而言,這是在執行分析時,針對呼叫選取的函式的呼叫函式執行個體收集的樣本總數百分比。此値包含針對呼叫函式所呼叫的函式收集的樣本。

  • 就所呼叫函式而言,這是在執行分析時,針對由選取的函式呼叫的所呼叫函式執行個體收集的樣本總數百分比。此値包含針對所呼叫函式呼叫的函式收集的樣本。

專有樣本百分比

  • 就選取的函式而言,這是在執行分析時,針對選取的函式收集的樣本總數百分比。此値不包含針對選取的函式所呼叫的函式收集的樣本。

  • 就呼叫函式而言,這是在執行分析時,針對呼叫選取的函式的呼叫函式執行個體收集的樣本總數百分比。此値不包含針對呼叫函式所呼叫的函式收集的樣本。

  • 就所呼叫函式而言,這是在執行分析時,針對由選取的函式呼叫的所呼叫函式執行個體收集的樣本總數百分比。此値不包含針對所呼叫函式呼叫的函式收集的樣本。

Hh780914.collapse_all(zh-tw,VS.110).gif模組與函式檢視

[模組] 與 [函式] 檢視會顯示分析報告中各函式的分析詳細資料。[模組] 檢視會根據包含 JavaScript 函式的 .js 原始程式檔對函式進行組織。其他函式則會依據模組列出,例如 .dll。[函式] 檢視列出所有函式,而不使用階層架構。在 [模組] 檢視中尋找您自己的程式碼通常會比使用 [函式] 檢視來得容易,但您可能會發現在 [函式] 檢視中比較函式較為容易。

模組與函式檢視資料行

資料行名稱

描述

內含樣本

函式位於呼叫堆疊時所收集的樣本數目。此樣本數目包含針對函式所呼叫的函式收集的樣本。

專有樣本

函式執行本身的程式碼時所收集的樣本數目。專有樣本不包含函式所呼叫的函式執行時收集的樣本。

內含樣本百分比

在執行分析期間,當函式位於呼叫堆疊時所收集的樣本總數百分比。

分子是函式的 [內含樣本]。

分母是執行分析時所收集的樣本總數。

專有樣本百分比

在執行分析時,針對函式收集的樣本總數百分比。此値不包含針對函式所呼叫的函式收集的樣本。

Hh780914.collapse_all(zh-tw,VS.110).gif程式行檢視

取樣資料的 [程式行] 檢視會針對在執行分析期間收集樣本時執行的陳述式,列出效能資料。在原始程式檔中,陳述式在原始程式檔中可以長達多行,而單一行程式也可能包含一個以上的陳述式。

資料行名稱

描述

內含樣本

執行分析時針對程式行收集的樣本數目。此樣本數目包含針對程式行所呼叫的函式收集的樣本。

專有樣本

執行分析時針對程式行收集的樣本數目。此樣本數目不包含針對程式行所呼叫的函式收集的樣本。

內含樣本百分比

在執行分析時,針對程式行收集的樣本總數百分比。此値包含針對程式行所呼叫的函式收集的樣本。

專有樣本百分比

在執行分析時,針對程式行收集的樣本總數百分比。此値不包含針對程式行所呼叫的函式收集的樣本。

原始程式碼開頭行

收集這個樣本的原始程式檔中的起始行號。

原始程式碼開頭字元

收集這個樣本的原始程式檔行中,起始字元的位移。

原始程式碼結尾行

收集這個樣本的原始程式檔中的結尾行號。

原始程式碼結尾字元

收集這個樣本的原始程式檔行中,結尾字元的位移。

自訂資料格檢視

您可以新增或移除資料行,以及變更資料行的顯示順序。開啟資料表標題列的捷徑功能表,然後選擇 [新增/移除資料行]。選取您要檢視之資料行的核取方塊,並清除要隱藏之資料行的核取方塊。使用箭號按鈕移動選取的資料行。

其他分析資料行

資料行名稱

描述

函式位址

函式的記憶體位址。

函式行號

原始程式檔中這個函式的開頭行號。

原始程式檔

含有這個函式定義的原始程式檔。

模組名稱

包含該函式的模組名稱。

模組路徑

包含該函式的模組路徑。

處理序 ID

分析執行的處理序 ID (PID)。

處理序名稱

處理序的名稱。