共用方式為


從效能及診斷頁面執行分析工具

適用於 Windows 和 Windows Phone

您可以使用 Visual Studio 分析工具和診斷工具,分析 Windows 市集和 Windows Phone 應用程式的效能、記憶體使用量和能源消耗。 透過 [效能及診斷] 中樞,您可以輕易地選取和執行這些工具、在單一診斷回合中合併多項工具,以及管理這些工具產生的報告。 您可以在大部分部署目標上執行這些工具。 如果是 Windows Phone 應用程式,請使用電話或模擬器; 如果是 Windows 市集應用程式,請使用 Visual Studio 電腦、模擬器或遠端電腦。 收集資料完成之後,診斷報告隨即顯示時間軸圖表和詳細資料檢視。 [效能及診斷] 報告篩選和設定可協助您將重點放在關鍵資料部分。

效能及診斷中樞內的工具

[效能及診斷] 中樞提供您可以針對特定應用程式類型 (XAML 和 C#/VB/C++ 或是 HTML 和 JavaScript) 使用的工具,以及可以在單一診斷回合中使用的工具。

CPU 使用量 (全部)

能源消耗 (全部)

記憶體使用量 (C#/VB/C++)

JavaScript 記憶體使用量

XAML UI 回應性

HTML UI 回應性

JavaScript 函式計時

本文內容

  • 快速入門:收集診斷資料

  • 收集診斷資料

    將使用者標記加入至診斷資料以識別位置 | 設定啟始專案 | 設定分析目標 | 選擇要在診斷工作階段中執行的工具 | 開始和停止診斷工作階段

  • 開啟診斷工作階段檔案

  • 效能及診斷資料頁面

  • 疑難排解

快速入門:收集診斷資料

注意事項注意事項

您必須具有系統管理員權限才能執行效能及診斷工具。您可以系統管理員身分執行 Visual Studio,或是選擇在開始診斷工作階段時,以系統管理員身分執行這些工具。

  1. 在 Visual Studio 中開啟專案。

  2. 設定部署位置。

    僅適用於 Windows Phone

    您可以將 Windows Phone 應用程式部署至電話或其中一個 Visual Studio 模擬器。

    僅適用於 Windows

    您可以將 Windows 市集應用程式部署至 Visual Studio 電腦、Visual Studio 模擬器,或是已連接網路的電腦或平板電腦。

    注意:若要在遠端電腦或平板電腦上執行診斷工作些段,就必須在這些遠端目標中安裝和執行 Visual Studio 遠端工具。 請參閱在遠端電腦上從 Visual Studio 執行 Windows 市集應用程式.

    從 [偵錯] 工具列的偵錯位置清單中,選取應用程式的部署位置。 以下是電話應用程式清單:

    Windows Phone 應用程式的部署目標清單

  3. 開啟 [效能及診斷] 工作階段。 選擇 [偵錯] 功能表上的 [效能及診斷] (快速鍵:Alt+F2)。

  4. 在 [效能及診斷] 中樞內,選擇要在工作階段中執行的一或多項工具。 只有適用於專案類型和程式語言的工具才會顯示。 當您選擇診斷工具時,無法在相同診斷工作階段中執行的工具選項都會停用。 如果是 JavaScript 應用程式,您的選擇看起來如下:

    選擇一個或多個診斷工具

  5. 若要開始診斷工作階段,請選擇 [開始]。

  6. 執行您要為其收集資料的情節。

    執行工作階段期間,某些工具會在 [效能及診斷] 頁面上顯示即時資料圖表。

    在 [效能及診斷] 頁面上收集資料

  7. 若要結束診斷工作階段,請選擇 [停止收集]。

收集診斷資料

將使用者標記加入至診斷資料以識別位置 | 設定啟始專案 | 設定分析目標 | 選擇要在診斷工作階段中執行的工具 | 開始和停止診斷工作階段

將使用者標記加入至診斷資料以識別位置

您可以將「使用者標記」(User Mark) 加入至分析資料,以便識別時間軸尺規中的區段。

時間軸中的使用者標記

在方法執行的時候,該標記會在時間軸中顯示為橙色三角形。 當您將滑鼠游標停留在標記上方時,訊息和時間會顯示為工具提示。 如果兩個以上的使用者標記很接近,標記會合併,並且工具提示資料會結合在一起。 您可以放大時間軸來分隔標記。

注意事項注意事項
  • JavaScript 函式計時報告並不會顯示使用者標記。

  • 如果只在診斷工作階段中使用 [CPU 使用量] 工具,報告就不會顯示使用者標記。

  • 如需更多範例,請參閱 Windows SDK 範例:LoggingSession 範例

將標記加入至 C#、Visual Basic、C++ 程式碼

若要將使用者標記加入至 C#、Visual Basic、C++ 程式碼,請先建立 Windows.Foundation.Diagnostics LoggingChannel 物件。 接著,請在程式碼中您要標記的位置插入 LoggingChannel.LogMessage 方法的呼叫, 並在呼叫中使用 LoggingLevel.Information

當方法執行時,使用者標記就會與訊息一起加入分析資料。

注意事項

將記錄通道加入至程式碼會帶來幾項挑戰:

每個開啟的記錄通道都必須具有唯一名稱。 如果嘗試將新的同名記錄通道建立為開啟的通道,就會發生例外狀況。

一種避免在程式碼中出現重複名稱的方式是使用 static (VB 中是 Shared) 方法傳回其名稱保證是唯一的 LoggingChannel。 以下是使用 Guid 提供唯一性的範例:

//using Windows.Foundation.Diagnostics
public static LoggingChannel GetLoggingChannel()
{
    var name = Guid.NewGuid().ToString();
    return new LoggingChannel(name);
}
'Imports Windows.Foundation.Diagnostics
Public Shared Function GetLoggingChannel() As LoggingChannel
    Dim Name = Guid.NewGuid().ToString()
    GetLoggingChannel = New LoggingChannel(Name)
End Function
//using namespace Windows::Foundation::Diagnostics;
static LoggingChannel^ MainPage::GetLoggingChannel()
{
    auto name = (ref new Guid())->ToString();
    auto channel = ref new LoggingChannel(name);
    return channel;
}

C# 和 VB:應處置 LoggingChannel 物件

因為 LoggingChannel 物件使用系統資源,所以 LoggingChannel 的 C# 和 VB 投影衍生自 System.IDisposabl 介面,讓您可以在 CLR 記憶體回收行程終結物件之前釋出資源。 在 C++ 程式碼中,當 LoggingChannel 物件超出範圍時,就會立即終結該物件並釋出資源。 以下是可用來將使用者標記加入至診斷工作階段檔案的模式範例:

void MyScenario()
{
    var logLevel = LoggingLevel.Information;
    using(var channel = Utils.GetLoggingChannel())
    {
        channel.LogMessage("MyScenario Start", logLevel);
        // scenario code
        channel.LogMessage("MyScenario End", logLevel);
    }
}
Sub MyScenario()
    Dim logLevel = LoggingLevel.Information
    Using channel As LoggingChannel = Utils.GetLoggingChannel()
        channel.LogMessage("MyScenario Start", logLevel)
        'scenario code
        channel.LogMessage("MyScenario End", logLevel)
    End Using
End Sub
// m_channel resources are released when containing 
// object goes out of scope
LoggingChannel^ m_channel = MainPage::GetLoggingChannel();
LoggingLevel m_logLevel = LoggingLevel::Information;

void MyScenario()
{
    m_channel->LogMessage(L"MyScenario Start", m_logLevel);
    //scenario code
    m_channel->LogMessage(L"MyScenario Start", m_logLevel);
}

將標記加入至 JavaScript 程式碼

若要加入使用者標記,請在程式碼中您要標記的位置,插入下列程式碼:

if (performance && performance.mark) {
    performance.mark(markDescription);
}

markDescription 這個字串包含要在使用者標記工具提示中顯示的訊息。

設定啟始專案

如果解決方案包含多個應用程式專案,請確定您要分析的專案已設定為啟始專案。 在 [方案總管] 中選取專案,然後從內容功能表選取 [設定為啟始專案]。

選擇 [設定為啟始專案]

設定部署位置

您可以在已直接連接 Visual Studio 電腦的 Windows Phone 裝置或 Visual Studio 電話模擬器中,針對電話應用程式執行診斷工作階段。 您可以在 Visual Studio 電腦、Visual Studio 裝置模擬器,或者是已透過網路連接到 Visual Studio 電腦或已透過乙太網路轉 USB 纜線直接連接 Visual Studio 電腦的遠端裝置上,執行 Windows 市集應用程式。 您可以在專案屬性的 [偵錯] 頁面上設定部署目標,也可以從 Visual Studio 工具列上的偵錯位置清單中選擇目標。 以下是 Windows 市集應用程式的部署清單:

Windows 市集應用程式的部署目標清單

您在偵錯位置工具列上選擇的項目會儲存在專案屬性中。

僅適用於 Windows

  • 若要在遠端 Windows 市集裝置上執行診斷工作些段,就必須在這些遠端目標中安裝和執行 Visual Studio 遠端工具。 請參閱在遠端電腦上從 Visual Studio 執行 Windows 市集應用程式.

  • 當您在偵錯位置清單中選擇 [遠端電腦] 時,如果尚未指定遠端裝置,請在出現的 [遠端連接] 對話方塊中指定裝置。

    [遠端連接] 對話方塊

  • 指定遠端裝置目標之後,您必須使用專案屬性的 [偵錯] 頁面才能變更為新裝置。

  • 如果您透過 USB 轉乙太網路纜線來連接遠端裝置與 Visual Studio 電腦, 請在 [遠端連接] 對話方塊中,指定遠端裝置的 IP 位址。

設定分析目標

除了從 Visual Studio 專案啟動應用程式以外,您還可以在替代目標中執行診斷工作階段。 例如,您想針對從 Windows 應用程式市集安裝的特定版本應用程式診斷效能問題。

選擇診斷工具分析目標

僅適用於 Windows

您可以啟動裝置中已安裝的 Windows 市集應用程式,也可以將診斷工具附加至執行中的 Windows 市集應用程式。 選擇 [執行中的應用程式] 或 [已安裝的應用程式] 時,您可以從指定之部署目標中顯示的應用程式清單內,選取應用程式。

選擇執行中或已安裝的應用程式進行診斷

僅適用於 Windows Phone

選擇 [Internet Explorer] 時,您可以指定 URL 以及變更電話部署目標。

指定要在 Internet Explorer 中顯示的 URL

選擇要在診斷工作階段中執行的工具

在 [效能及診斷] 中樞內,選擇要在診斷工作階段中執行的一或多項工具。 只有適用於專案類型和程式語言的工具才會顯示。 當您選擇診斷工具時,無法在相同診斷工作階段中執行的工具選項都會停用。 如果是 JavaScript 應用程式,您的選擇看起來如下:

開始和停止診斷工作階段

若要開始診斷工作階段,請選擇 [開始]。

若要結束診斷工作階段並開始分析資料,請選擇頁面底部的 [停止收集]。

開啟診斷工作階段檔案

當您在診斷工作階段中停止收集資料時,Visual Studio 會立即分析資料,然後在 [效能及診斷] 報告中顯示分析結果。

此外,您也可以從 [效能及診斷] 中樞內最近開啟的清單中,開啟已儲存的 .diagnosis 工作階段檔案。

開啟已儲存的診斷工作階段檔案

選擇 [效能及診斷] 中樞頂端顯示或隱藏按鈕,即可展開或摺疊最近使用的檔案清單。

效能及診斷報告

[效能及診斷] 資料頁

步驟 1

時間軸會顯示程式碼剖析工作階段的長度、應用程式週期啟用事件,以及使用者標記。

步驟 2

您可以拖曳藍色巡覽列,選取時間軸的區域,將報告限制在時間軸的一部分。

步驟 3

一項工具可以顯示一或多份主要圖表。 如果您的診斷工作階段是透過多個工具建立,那麼所有主要圖表都會顯示。

步驟 4

您可以摺疊及展開個別圖表。

步驟 5

如果您的資料包含來自多個工具的資訊,則索引標籤底下都會列出工具的詳細資料。

步驟 6

一項工具可以包含一或多個詳細資料檢視。 檢視會經過特定時間軸區域篩選。

疑難排解

診斷事件已捨棄。報表中的某些資訊可能遺失或不準確

效能與診斷工具中的資料收集器,可能會耗用掉大量的記憶體和 CPU。 當資料收集器無法記錄所有診斷事件時,會在 [效能與診斷] 頁面頂端的資訊列中顯示訊息。 報告中的某些資料可能遺失或無效。

若要解決此問題,請嘗試下列步驟以釋出機器上的資源,然後重新執行診斷工作階段:

  1. 關閉不屬於診斷工作階段的其他應用程式。

  2. 簡化您的案例,減少要收集的資料。

  3. 減少在單一工作階段中使用的診斷工具。

請參閱

其他資源

效能 (Windows 市集應用程式)

Windows SDK LoggingSession 範例