Xamarin Profiler

本指南會探索 Xamarin Profiler 的主要功能。 它會查看剖析工具、程式代碼剖析工具的使用時機,以及分析 Xamarin 應用程式的標準工作流程。

應用程式的成功取決於用戶體驗。 身為開發人員,您可能已在應用程式中實作一些非常令人敬畏的功能,但如果應用程式緩慢或滿是當機,使用者可能會擺脫它。

從歷史上看,Mono 具有強大的命令行分析工具,可收集Mono運行時間中執行之程式的相關信息, 稱為Mono記錄分析工具。 Xamarin Profiler 是 Mono 記錄分析工具的圖形化介面,並支援在 Mac 上分析 Android、iOS、tvOS 和 Mac 應用程式,以及 Windows 上的 Android、iOS 和 tvOS 應用程式。

Xamarin Profiler 有數種工具可供分析 : 配置、週期和時間分析工具。 本指南會探索這些儀器測量的內容、分析應用程式的方式,並釐清每個畫面上呈現的數據意義。

本指南會檢查常見的分析案例,並介紹分析工具作為工具來協助分析和優化iOS和Android應用程式。

下載並安裝

注意

您必須是 Visual Studio Enterprise 訂閱者,才能在 Windows 上的 Visual Studio Enterprise 或 Mac 上的 Visual Studio for Mac 中解除鎖定此功能。

Xamarin Profiler 是獨立應用程式,與 Visual Studio for Mac 和 Visual Studio 整合,可從 IDE 內啟用分析。

下載您平台的安裝套件:

下載之後,請啟動安裝程式,將 Xamarin Profiler 新增至您的系統。

分析工具和分析

程式代碼剖析是應用程式開發中一個重要且經常被忽略的步驟。 程式代碼剖析是動態程式分析一種形式-它會在程序執行和使用時分析程式。 分析工具是一種數據採礦工具,可收集時間複雜度、特定方法的使用方式,以及所配置記憶體的相關信息。 分析工具可讓您深入鑽研和分析這些計量,以找出程式代碼中的問題區域。

設計及開發應用程式時,請務必不要過早優化;也就是說,花時間在很少存取的區域開發您的程序代碼。 這是分析的強大功能。 分析工具可讓您深入瞭解程式代碼基底最常使用的部分,並協助找出您應該花時間進行改善的區域。 開發人員應該注意瞭解應用程式花費的大部分時間,以及應用程式如何使用記憶體。

分析在所有類型的開發中都很有用,但它在行動裝置開發中特別重要。 未優化的程式代碼在行動平臺上比桌面計算機更明顯,而應用程式的成功取決於有效率地執行且優化的程序代碼。

Xamarin Profiler

Xamarin Profiler 可讓開發人員從 Visual Studio for Mac 或 Visual Studio 內部分析應用程式。 分析工具會收集並顯示應用程式的相關信息,然後開發人員可以使用該應用程式來分析應用程式的行為。 使用 Xamarin Profiler 來分析應用程式的方式有很多種,也就是記憶體分析與統計取樣。 這些分別透過配置和時間分析工具工具執行。

目前,Xamarin Profiler 可用於在 Mac 上測試 Xamarin.iOS、Xamarin.Android 和 Xamarin.Mac 應用程式(透過 Visual Studio for Mac)。 分析工具是與 IDE 不同的程式,因此,除了從 Visual Studio for Mac 啟動之外,還可以作為獨立應用程式來檢查單一記錄分析工具所產生的.exe和.mlpd檔案。

分析工具支援

下列平臺上提供 Xamarin Profiler 的支援:

  • Visual Studio for Mac (macOS,含企業授權)

    • Android
      • 裝置和模擬器
    • iOS
      • 裝置和模擬器
    • tvOS (不支援時間檢測)
      • 裝置和模擬器
    • Mac:
  • Visual Studio (僅限 企業 版)

    • Android
      • 裝置和模擬器
    • iOS [實驗性]
      • 裝置和模擬器
    • tvOS
      • 裝置和模擬器

請注意,您 只能 分析 偵錯 組態。

Profiler 基本概念

本節介紹 Xamarin Profiler 的部分,並導覽其功能。

在您的應用程式中允許分析

您必須先在應用程式的 [項目選項] 中允許程式代碼剖析,才能成功分析您的應用程式。

  • iOS:

建置 > iOS 偵 > 錯啟用分析

iOS Options Dialog in Visual Studio for Mac

  • Android:

建置 > Android偵錯 > 啟用開發人員檢測

Android Options Dialog in Visual Studio for Mac

啟動分析工具

當您分析 iOS 或 Android 應用程式,或做為獨立應用程式時,可以從 IDE 啟動 Xamarin Profiler。

從 Visual Studio for Mac 啟動

  1. 首先,請確定您的應用程式已載入 Visual Studio for Mac,然後選取 [預設] 偵錯組態。
  2. 流覽至 在 Visual Studio for Mac 中執行 > 開始分析,或在 Visual Studio 中分析 > Xamarin Profiler 以開啟 Profiler ,如下圖所示:

Launching the Profiler from Visual Studio for Mac

如果功能表項未出現,請參閱 疑難解答指南

這會啟動 Profiler,並自動開始分析應用程式。

Profiler 可用來測量記憶體和效能。 其可透過配置和時間分析工具工具達成此目的,我們將在下一節中詳細探索。

儲存和載入分析工具會話

若要隨時儲存分析會話,請從分析工具功能表欄選擇 [ 檔案 > 另存新檔... ]。 這會以 mlpd 格式儲存盤案,這是用於分析數據的特殊、高度壓縮格式。

安裝之後,您可以在 [應用程式] 資料夾中找到 Xamarin Profiler,如下列螢幕快照所示:

Open standalone Profiler from Mac

您可以開啟獨立應用程式,選取 [選擇目標] 並載入檔案,以將 .mlpd 檔案載入 Profiler。

如需詳細資訊,請參閱 產生 .mlpd 檔案

分析工具功能

Xamarin Profiler 是由五個區段所組成,如下所示:

  • 工具列 – 位於分析工具頂端,提供啟動/停止分析的選項、選取目標進程、檢視應用程式的運行時間,以及選取組成分析工具應用程式的分割檢視。
  • 檢測清單 – 這會列出針對分析會話載入的所有檢測。
  • 繪圖圖 – 這些圖表與檢測清單中的相關儀器水平相關。 滑桿(顯示在時間分析工具下方)可用來變更縮放比例。
  • 檢測詳細數據區域 - 包含目前檢測所選取檢視所顯示的數據。 我們將在下一節中更詳細地查看這些檢視。
  • 偵測器檢視 – 這包含區段控件可以選取的區段。 這些區段相依於選取的檢測,包括:組態 設定、統計數據、堆疊追蹤資訊和根目錄路徑。

分配

配置檢測會提供有關應用程式中物件建立和垃圾收集的詳細資訊。

分析工具頂端是配置圖表,其會顯示分析期間定期配置的記憶體數量。 目前配置圖表是配置總數,而不是該時間點堆積的大小。 從某種意義上說,它永遠不會下降,它只會增加。 這包括在堆疊上配置的物件。 視所使用的運行時間版本而定,圖表看起來可能不同,即使是相同的應用程式也一樣。

配置工具中有不同的數據檢視,可讓開發人員分析其應用程式使用方式並釋放記憶體。 以下說明這些檢視:

  • 設定 – 這會依類別名稱顯示所有配置和群組的清單。 這會提供使用類別和方法、使用頻率,以及所用類別的集體大小的絕佳概觀。 雙擊類別會顯示設定的記憶體:

Allocations 的偵測器檢視提供篩選和分組物件、提供記憶體配置的統計數據,以及堆疊追蹤和根目錄路徑的檢視。

  • 呼叫樹 狀結構 – 這會顯示應用程式中所有線程的整個呼叫樹狀結構,並包含每個節點上配置之內存的相關信息。 在清單中選取專案時,所有同層級節點都會呈現灰色。 您可以展開樹狀結構,或按兩下元素向下切入。 顯示此數據檢視時,可以使用顯示設定偵測器檢視來變更呈現方式。 目前有兩個選項:
    1. 反向呼叫樹 狀結構 – 這會考慮從上到下的堆棧追蹤。 這是一個方便的檢視選項,因為它表示 CPU 花費時間的最深層方法。
    2. 依線程 分隔 – 此選項會依線程組織呼叫樹狀結構。
  • 快照集 – 此窗格會顯示記憶體快照集的相關信息。 若要在分析即時應用程式時產生這些專案,請按下工具列中每個您想要查看保留和釋放記憶體的工具列中的 [相機] 按鈕。 然後,您可以按兩下每個快照集,以探索幕後發生的情況。 請注意,只有在即時分析應用程式時,才能建立快照集。

時間分析工具

Time Profiler 檢測會測量應用程式每個方法所花費的時間。 應用程式會定期暫停,而且每個使用中線程上都會執行堆疊追蹤。 [檢測詳細數據] 區域中的每個數據列都會顯示已遵循的執行路徑。

如下列螢幕快照所示,繪圖圖表會顯示應用程式在執行時收到的樣本數目:

  • 呼叫樹 狀結構 – 顯示每個方法所花費的時間量:

Cycles

透過使用 C# 和 F# Managed 程式代碼,可能會相當常見,但不幸的是,建立永遠不會處置之對象的參考相當容易。 此檢測可讓您找出這些物件,並顯示應用程式中參考的迴圈。

分析應用程式

目前,只能分析預設的偵錯組態。

如果您使用任何其他設定來分析應用程式,您將會看到下列訊息對話框:

選取 [ 更新 ] 以繼續。

SGen 垃圾收集行程和分析

SGen 垃圾收集行程會用於所有 Xamarin 平臺。

SGen 是一代代 GC,它會將應用程式的物件配置成三個堆積:苗圃、主要堆積和大型物件空間。 這可加快垃圾收集的執行速度。 SGen 目前是 Xamarin.Android 和 Xamarin.iOS 整合應用程式的預設 GC。

使用傳統 API 的 Xamarin.iOS 應用程式使用了 Boehm GC – 保守的非世代垃圾收集行程。 因為它是保守的,它不太可能釋放可用的記憶體,這可能會導致不正確的結果使用分析工具。 因此,配置檢測無法與 Boehm 垃圾收集行程搭配使用。

如果您的應用程式使用 Boehm GC,系統會提示您顯示訊息對話方塊,但 Xamarin 不建議將使用 Boehm 的現有 iOS 應用程式切換至 SGen,而不需仔細研究和徹底測試。 Xamarin 也不建議您切換至 SGen 進行程式代碼剖析,然後切換回 ,因為這些結果不會提供記憶體使用量的精確效能評定。

如需記憶體管理的詳細資訊,請參閱 記憶體和效能最佳做法 指南。

摘要

在本指南中,我們已探討什麼是分析,以及它對開發人員有何好處。 然後,我們引進了 Xamarin Profiler,提供一些歷程記錄和資訊,以瞭解其運作方式。 最後,我們流覽了 Xamarin Profiler 的功能,並探索了配置和時間分析工具工具。