從效能及診斷頁面執行分析工具
您可以使用 Visual Studio 分析工具和診斷工具,分析 Windows 市集和 Windows Phone 應用程式的效能、記憶體使用量和能源消耗。 透過 [效能及診斷] 中樞,您可以輕易地選取和執行這些工具、在單一診斷回合中合併多項工具,以及管理這些工具產生的報告。 您可以在大部分部署目標上執行這些工具。 如果是 Windows Phone 應用程式,請使用電話或模擬器; 如果是 Windows 市集應用程式,請使用 Visual Studio 電腦、模擬器或遠端電腦。 收集資料完成之後,診斷報告隨即顯示時間軸圖表和詳細資料檢視。 [效能及診斷] 報告篩選和設定可協助您將重點放在關鍵資料部分。
效能及診斷中樞內的工具
[效能及診斷] 中樞提供您可以針對特定應用程式類型 (XAML 和 C#/VB/C++ 或是 HTML 和 JavaScript) 使用的工具,以及可以在單一診斷回合中使用的工具。
本文內容
快速入門:收集診斷資料
收集診斷資料
將使用者標記加入至診斷資料以識別位置 | 設定啟始專案 | 設定分析目標 | 選擇要在診斷工作階段中執行的工具 | 開始和停止診斷工作階段
開啟診斷工作階段檔案
效能及診斷資料頁面
疑難排解
快速入門:收集診斷資料
![]() |
---|
您必須具有系統管理員權限才能執行效能及診斷工具。您可以系統管理員身分執行 Visual Studio,或是選擇在開始診斷工作階段時,以系統管理員身分執行這些工具。 |
在 Visual Studio 中開啟專案。
設定部署位置。
您可以將 Windows Phone 應用程式部署至電話或其中一個 Visual Studio 模擬器。
您可以將 Windows 市集應用程式部署至 Visual Studio 電腦、Visual Studio 模擬器,或是已連接網路的電腦或平板電腦。
注意:若要在遠端電腦或平板電腦上執行診斷工作些段,就必須在這些遠端目標中安裝和執行 Visual Studio 遠端工具。 請參閱在遠端電腦上從 Visual Studio 執行 Windows 市集應用程式.
從 [偵錯] 工具列的偵錯位置清單中,選取應用程式的部署位置。 以下是電話應用程式清單:
開啟 [效能及診斷] 工作階段。 選擇 [偵錯] 功能表上的 [效能及診斷] (快速鍵:Alt+F2)。
在 [效能及診斷] 中樞內,選擇要在工作階段中執行的一或多項工具。 只有適用於專案類型和程式語言的工具才會顯示。 當您選擇診斷工具時,無法在相同診斷工作階段中執行的工具選項都會停用。 如果是 JavaScript 應用程式,您的選擇看起來如下:
若要開始診斷工作階段,請選擇 [開始]。
執行您要為其收集資料的情節。
執行工作階段期間,某些工具會在 [效能及診斷] 頁面上顯示即時資料圖表。
若要結束診斷工作階段,請選擇 [停止收集]。
收集診斷資料
將使用者標記加入至診斷資料以識別位置 | 設定啟始專案 | 設定分析目標 | 選擇要在診斷工作階段中執行的工具 | 開始和停止診斷工作階段
將使用者標記加入至診斷資料以識別位置
您可以將「使用者標記」(User Mark) 加入至分析資料,以便識別時間軸尺規中的區段。
在方法執行的時候,該標記會在時間軸中顯示為橙色三角形。 當您將滑鼠游標停留在標記上方時,訊息和時間會顯示為工具提示。 如果兩個以上的使用者標記很接近,標記會合併,並且工具提示資料會結合在一起。 您可以放大時間軸來分隔標記。
![]() |
---|
|
將標記加入至 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 市集應用程式的部署清單:
您在偵錯位置工具列上選擇的項目會儲存在專案屬性中。
|
設定分析目標
除了從 Visual Studio 專案啟動應用程式以外,您還可以在替代目標中執行診斷工作階段。 例如,您想針對從 Windows 應用程式市集安裝的特定版本應用程式診斷效能問題。
您可以啟動裝置中已安裝的 Windows 市集應用程式,也可以將診斷工具附加至執行中的 Windows 市集應用程式。 選擇 [執行中的應用程式] 或 [已安裝的應用程式] 時,您可以從指定之部署目標中顯示的應用程式清單內,選取應用程式。 |
|
選擇 [Internet Explorer] 時,您可以指定 URL 以及變更電話部署目標。 |
選擇要在診斷工作階段中執行的工具
在 [效能及診斷] 中樞內,選擇要在診斷工作階段中執行的一或多項工具。 只有適用於專案類型和程式語言的工具才會顯示。 當您選擇診斷工具時,無法在相同診斷工作階段中執行的工具選項都會停用。 如果是 JavaScript 應用程式,您的選擇看起來如下:
開始和停止診斷工作階段
若要開始診斷工作階段,請選擇 [開始]。
若要結束診斷工作階段並開始分析資料,請選擇頁面底部的 [停止收集]。
開啟診斷工作階段檔案
當您在診斷工作階段中停止收集資料時,Visual Studio 會立即分析資料,然後在 [效能及診斷] 報告中顯示分析結果。
此外,您也可以從 [效能及診斷] 中樞內最近開啟的清單中,開啟已儲存的 .diagnosis 工作階段檔案。
選擇 [效能及診斷] 中樞頂端顯示或隱藏按鈕,即可展開或摺疊最近使用的檔案清單。
效能及診斷報告
時間軸會顯示程式碼剖析工作階段的長度、應用程式週期啟用事件,以及使用者標記。 |
|
您可以拖曳藍色巡覽列,選取時間軸的區域,將報告限制在時間軸的一部分。 |
|
一項工具可以顯示一或多份主要圖表。 如果您的診斷工作階段是透過多個工具建立,那麼所有主要圖表都會顯示。 |
|
您可以摺疊及展開個別圖表。 |
|
如果您的資料包含來自多個工具的資訊,則索引標籤底下都會列出工具的詳細資料。 |
|
一項工具可以包含一或多個詳細資料檢視。 檢視會經過特定時間軸區域篩選。 |
疑難排解
診斷事件已捨棄。報表中的某些資訊可能遺失或不準確
效能與診斷工具中的資料收集器,可能會耗用掉大量的記憶體和 CPU。 當資料收集器無法記錄所有診斷事件時,會在 [效能與診斷] 頁面頂端的資訊列中顯示訊息。 報告中的某些資料可能遺失或無效。
若要解決此問題,請嘗試下列步驟以釋出機器上的資源,然後重新執行診斷工作階段:
關閉不屬於診斷工作階段的其他應用程式。
簡化您的案例,減少要收集的資料。
減少在單一工作階段中使用的診斷工具。