跳至主要內容

使用 CPU 分析器檢視

CPU 分析器檢視可讓您從 Dart 或 Flutter 應用程式記錄和分析工作階段。分析器可以幫助您解決效能問題,或大致了解應用程式的 CPU 活動。Dart VM 會收集 CPU 樣本(在單一時間點的 CPU 呼叫堆疊快照),並將資料傳送到 DevTools 進行視覺化。藉由彙總許多 CPU 樣本,分析器可以幫助您了解 CPU 將大部分時間花費在哪裡。

CPU 分析器

#

按一下 記錄 來開始記錄 CPU 分析。 完成記錄後,按一下 停止。 此時,CPU 分析資料會從 VM 中提取,並顯示在分析器檢視中(呼叫樹狀圖、由下而上、方法表和火焰圖)。

若要載入所有可用的 CPU 樣本,而無需手動記錄和停止,您可以按一下 載入所有 CPU 樣本,這會提取 VM 已記錄並儲存在其環形緩衝區中的所有 CPU 樣本,然後在分析器檢視中顯示這些 CPU 樣本。

由下而上

#

此表格提供 CPU 分析的由下而上表示。這表示由下而上表格中的每個最上層方法(或根)實際上是一個或多個 CPU 樣本的呼叫堆疊中最上層的方法。換句話說,由下而上表格中的每個最上層方法都是由上而下表格(呼叫樹狀圖)中的葉節點。在此表格中,可以展開方法以顯示其呼叫者

此檢視對於識別 CPU 分析中昂貴的方法非常有用。當此表格中的根節點具有較高的自身時間時,表示此分析中的許多 CPU 樣本都以該方法位於呼叫堆疊的最上層而結束。

由下而上檢視的螢幕擷取畫面 請參閱下方的指南章節,以了解如何啟用此影像中看到的藍色和綠色垂直線。

工具提示可以幫助您了解每個欄位中的值

總時間
對於由下而上樹狀結構中的最上層方法(至少在一個 CPU 樣本的最上層的堆疊框架),這是方法執行自身程式碼以及它呼叫的任何方法的程式碼所花費的時間。
自身時間
對於由下而上樹狀結構中的最上層方法(至少在一個 CPU 樣本的最上層的堆疊框架),這是方法僅執行自身程式碼所花費的時間。

對於由下而上樹狀結構中的子方法(呼叫者),這是透過子方法(呼叫者)呼叫時的最上層方法(被呼叫者)的自身時間。

表格元素(自身時間)由下而上表格的螢幕擷取畫面

呼叫樹狀圖

#

此表格提供 CPU 分析的由上而下表示。這表示呼叫樹狀圖中的每個最上層方法都是一個或多個 CPU 樣本的根。在此表格中,可以展開方法以顯示其被呼叫者

此檢視對於識別 CPU 分析中昂貴的路徑非常有用。當此表格中的根節點具有較高的時間時,表示此分析中的許多 CPU 樣本都以該方法位於呼叫堆疊的最下層而開始。

呼叫樹狀圖表格的螢幕擷取畫面 請參閱下方的指南章節,以了解如何啟用此影像中看到的藍色和綠色垂直線。

工具提示可以幫助您了解每個欄位中的值

總時間
方法執行自身程式碼以及它呼叫的任何方法的程式碼所花費的時間。
自身時間
方法僅執行自身程式碼所花費的時間。

方法表

#

方法表提供 CPU 分析中包含的每個方法的 CPU 統計資料。在左側的表格中,列出所有可用的方法及其 時間和 自身 時間。

時間是方法在呼叫堆疊任何地方所花費的組合時間,或者換句話說,是方法執行自身程式碼以及它呼叫的任何方法程式碼所花費的時間。

自身 時間是方法在呼叫堆疊最上層所花費的組合時間,或者換句話說,是方法僅執行自身程式碼所花費的時間。

Screenshot of a call tree table

從左側的表格中選取方法會顯示該方法的呼叫圖。呼叫圖顯示方法的呼叫者和被呼叫者,以及其各自的呼叫者/被呼叫者百分比。

火焰圖

#

火焰圖檢視是 呼叫樹狀圖 的圖形表示。這是 CPU 分析的由上而下檢視,因此在此圖表中,最上面的方法會呼叫它下面的方法。每個火焰圖元素的寬度代表方法在呼叫堆疊上所花費的時間量。

與呼叫樹狀圖一樣,此檢視對於識別 CPU 分析中昂貴的路徑非常有用。

Screenshot of a flame chart

說明選單可以透過按一下搜尋列旁邊的 ? 圖示來開啟,其中提供有關如何在圖表內導覽和縮放,以及色彩編碼圖例的資訊。火焰圖說明螢幕擷取畫面

CPU 取樣率

#

DevTools 設定 VM 收集 CPU 樣本的速率:1 個樣本 / 250 微秒 (μs)。這在 CPU 分析器頁面上預設選取為「CPU 取樣率:中」。可以使用頁面頂部的選取器修改此速率。

Screenshot of cpu sampling rate menu

取樣率分別為 1,000 Hz、4,000 Hz 和 20,000 Hz。 了解修改此設定的取捨非常重要。

較高取樣率記錄的分析會產生更精細的 CPU 分析,具有更多樣本。這可能會影響應用程式的效能,因為 VM 會更頻繁地被中斷以收集樣本。這也會導致 VM 的 CPU 樣本緩衝區更快溢位。VM 儲存 CPU 樣本資訊的空間有限。在較高的取樣率下,空間會填滿,並且比使用較低取樣率時更快開始溢位。這表示您可能無法存取從記錄分析開始的 CPU 樣本,具體取決於緩衝區是否在記錄期間溢位。

以較低取樣率記錄的分析會產生更粗略的 CPU 分析,具有較少的樣本。這對應用程式效能的影響較小,但您可能無法取得太多關於 CPU 在分析期間所執行作業的資訊。VM 的樣本緩衝區也會更慢填滿,因此您可以查看更長應用程式執行時間的 CPU 樣本。這表示您有更好的機會查看從記錄分析開始的 CPU 樣本。

篩選

#

在檢視 CPU 分析時,您可以依程式庫、方法名稱或 UserTag 來篩選資料。

Screenshot of filter by tag menu

指南

#

在查看呼叫樹狀圖或由下而上檢視時,有時樹狀結構可能非常深。為了幫助查看深層樹狀結構中的父子關係,請啟用 顯示指南 選項。這會在樹狀結構中的父代和子代之間新增垂直指南。

Screenshot of display options

其他資源

#

若要了解如何使用 DevTools 分析運算密集型曼德布羅集應用程式的 CPU 使用率,請查看導引式CPU 分析器檢視教學課程。 此外,了解當應用程式使用隔離區進行平行運算時,如何分析 CPU 使用率。