使用 .NET 物件配置工具來分析記憶體使用量
您可以使用 .NET 物件配置工具來檢視應用程式使用的記憶體數量,以及配置最多記憶體的程式碼路徑。
執行工具之後,您可以看到正在配置物件的函式執行路徑。 然後,您可以回到佔用最多記憶體的呼叫樹狀結構的根節點。
如需示範如何使用 .NET 物件配置工具來改善效能的教學課程,請參閱 案例研究:將程式碼優化初學者指南。
設定
選取 [Alt+F2,以在 Visual Studio 中開啟 [效能分析工具]。
選取 [.NET 物件配置追蹤] 複選框。
選擇 開始 按鈕來執行工具。
如果您在啟動分析工具之前啟用 [啟動時暫停收集] [選項],則在診斷會話檢視中選取 [記錄] 按鈕之前,將不會收集數據。
工具開始執行之後,請流覽您想要在應用程式中分析的案例。 然後選取 停止收集 或關閉您的應用程式以查看您的資料。
的視窗
選取 [配置] 索引標籤。如下所示的記憶體配置數據隨即出現。
您現在可以分析物件的記憶體配置。
在數據收集期間,追蹤工具可能會讓應用程式變慢。 如果追蹤工具或應用程式的效能很慢,而且您不需要追蹤每個物件,您可以調整取樣率。 若要這樣做,請在分析工具摘要頁面中選取追蹤工具旁的齒輪符號。
將取樣率調整為您想要的速率。 這項變更有助於加速收集和分析期間應用程式的效能。
如需如何讓工具更有效率的詳細資訊,請參閱 優化分析工具設定。
瞭解您的數據
在下列圖形檢視中,頂端圖表會顯示應用程式中即時物件的數目。 底部 物件 Delta 圖表顯示應用程式物件的百分比變化。 紅色橫條表示垃圾收集何時發生。
您可以選取時間範圍來篩選表格式數據,只顯示指定時間範圍的活動。 當您這樣做時,出現在索引卷標中的資訊會限定為篩選的時間範圍。
您也可以放大或縮小圖形。
分配
配置 檢視會顯示配置記憶體的物件位置,以及這些物件配置多少記憶體。
下列資訊會出現在 配置 檢視中:
Type 資料行是佔用記憶體的類別和結構清單。 請雙擊類型以查看其回溯,並將其顯示為反向呼叫樹狀結構。 在僅限 分配 視圖中,您可以看到選取類別中佔用記憶體的項目。
Allocations 欄顯示在特定配置類型或函式中佔用記憶體的物件數量。 此數據行只會出現在 配置、呼叫樹狀結構和 函數 視圖中。
默認情況下不會顯示 位元組 和 位元組平均大小 資料行。 若要顯示它們,請以滑鼠右鍵按兩下 類型 或 設定 資料行,然後選取 [位元組] 和 [平均大小], 選項將它們新增至圖表。
這兩個數據行與 Total (Allocations) 和 Self (Allocations)相似,不同之處在於它們會顯示所佔用的記憶體數量,而不是佔用記憶體的物件數目。 這些欄只會出現在 [配置] 檢視中。
模組名稱 欄會顯示包含正在呼叫的函式或程序的模組。
所有這些數據行都是可排序的。 針對 類型 和 模組名稱 的資料行,您可以依字母順序將專案以遞增或遞減的順序排序。 針對 配置、字節 和 平均大小(字節),您可以按數值遞增或遞減排序專案。
符號
下列符號會出現在 配置、呼叫樹,及 函式 標籤中:
- 實值類型,例如整數
- 值型集合,例如整數陣列
- 字串之類的參考類型
- 參考型別集合,例如字串陣列
呼叫樹
呼叫樹狀結構 檢視顯示含有分配大量記憶體物件的函式執行路徑。
下列資訊會出現在 呼叫樹 檢視中:
- 函數名稱 數據行會顯示包含配置記憶體之物件的函式進程或名稱。 畫面顯示是根據您正在檢查的節點層級而定。
- Total (Allocations) 和 Total Size (Bytes) 資料行會顯示已設定物件的數目以及函式及其所呼叫之所有其他函式所使用的記憶體數量。 預設會隱藏 總大小(位元元組) 欄。
- Self (Allocations) 和 Self-Size (Bytes) 資料行會顯示已設定物件的數目,以及單一選取函式或配置類型所使用的記憶體數量。
- 平均大小(位元組) 資料行會顯示與 配置 視圖中相同的資訊。 預設會隱藏此資料行。
- 模組名稱 欄會顯示包含呼叫函式或進程的模組。
呼叫樹 檢視中顯示的其他選項包括:
- 展開經常性路徑 按鈕會反白顯示函式執行路徑,其中包含配置記憶體的許多物件。 演算法會從您選取的節點開始,並醒目提示資源配置最多的路徑,引導您在調查過程中。
- [顯示熱路徑] 按鈕會顯示或隱藏標示哪些節點屬於熱路徑的火焰符號。
功能
Functions 檢視會顯示配置記憶體的進程、模組和函式。
Functions 檢視中顯示的資訊包括:
Name 欄將進程顯示為最高層級節點。 進程下方是模組,而模組下方是函式。
以下資料行會顯示與 配置 和 呼叫樹狀結構 視圖中相同的資訊:
- 總計(配置)
- 自我(配置)
- 總大小(位元組)
- 自身大小 (位元組)
- 平均大小(位元組)
收集
集合 檢視會顯示在垃圾收集期間收集或保留多少物件。
下列資訊會出現在 集合 檢視中。
- GC 欄位會顯示可執行檔生命週期中這個垃圾收集的識別碼。
- 世代 欄位顯示垃圾收集的世代。
- GC 類型 欄顯示此垃圾回收的類型。
- GC Reason 欄位顯示此垃圾收集事件的原因。
- 暫停持續時間 欄會顯示因垃圾收集器需要獨佔使用堆積而阻止執行的時間。 在背景垃圾收集中,此值很小。
- LOH 大小 資料行會顯示垃圾回收程式執行之後大型物件堆的大小。
- 執行垃圾收集行程之後,POH 大小 數據行會顯示釘選物件堆積的大小。
- 可終結物件存留(MB) 欄顯示在垃圾回收後存活的具有終結器的物件的 MB 大小。
- Pinned Objects 欄顯示這次垃圾收集所提升的已釘選物件數目。
- Collected 欄位會顯示垃圾回收器收集的物件數目。
- Survived 欄位會顯示在執行垃圾收集之後倖存的物件數目。
當您選取數據列時,此檢視也會顯示餅圖,以依類型將收集及存留的物件可視化。
篩選工具
配置、呼叫樹狀結構和 函式 檢視都包含 [顯示 Just My Code] 和 [顯示原生程式代碼] 選項,以及篩選方塊。
- 顯示 Just My Code 會將系統、架構和其他非使用者程式代碼折疊成 [外部程式代碼] 框架,讓您可以只專注於程式代碼。 如需詳細資訊,請參閱 使用 Just My Code偵錯用戶程序代碼。
- 顯示原生碼 在分析目標內顯示原生碼,並且可以包含非用戶代碼。
- 使用篩選方塊,您可以根據您提供的值來篩選 名稱 或 函數名稱 欄位。 在方塊中輸入字串值。 然後數據表只會顯示包含該字串的類型。