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