DA0023:高 GC CPU 時間
規則 ID |
DA0023 |
分類 |
.NET Framework 使用 |
程式碼剖析方法 |
全部 |
訊息 |
記憶體回收中的 % 時間非常高。 這表示過量的記憶體回收額外負荷可能正影響應用程式的回應。 您可以收集 .NET 記憶體配置資料和物件存留期資訊,詳細了解應用程式所使用的記憶體配置模式。 |
規則型別 |
告知性 |
當您使用取樣、.NET 記憶體或資源爭用方法進行程式碼剖析時,必須至少收集 10 個範本才能觸發此規則。
原因
程式碼剖析期間收集的系統效能資料指出,相較於應用程式處理總時間,記憶體回收所花費的時間量相當高。
規則描述
Microsoft .NET Common Language Run-Time (CLR) 提供一套自動化的記憶體管理機制,它會使用記憶體回收行程從應用程式不再使用的物件中回收記憶體。 根據許多配置的存留期較短的假設,記憶體回收行程是層代導向。 例如,區域變數應該存留較短。 新建立的物件會從層代 0 (Gen 0) 開始,然後進入層代 1 (當它們在記憶體回收行程之後存留下來時),最後轉換至層代 2 (如果應用程式仍使用這些物件的話)。
層代 0 中的物件較常回收而且通常非常有效率。 層代 1 中的物件較不常回收而且比較沒有效率。 最後,層代 2 中存留較久的物件應該更不常回收。 層代 2 回收 (完全記憶體回收行程) 也是成本最高昂的作業。
當相較於應用程式處理總時間,記憶體回收所花費的時間量相當高時,會引發這個規則。
注意事項 |
---|
當相較於應用程式處理總時間,記憶體回收所花費的時間比例過高時,則會引發 DA0024:過多 GC CPU 時間警告,而不是這個規則。 |
如何調查警告
按兩下 [錯誤清單] 視窗中的訊息,即可巡覽至程式碼剖析資料的標記檢視。 尋找 .NET CLR Memory\% Time in GC 資料行。 判斷是否有特定程式執行階段的 Managed 記憶體回收額外負荷比其他階段更多。 將 % Time in GC 值與 # of Gen 0 Collections、# of Gen 1 Collections、# of Gen 2 Collections 資料行中所回報的記憶體回收速率相比較。
% Time in GC 值嘗試回報相較於處理總時間,應用程式花在執行記憶體回收的時間百分比。 請注意,在某些情況下,% Time in GC 值可能回報非常高的值,但這並不是因為過多的記憶體回收。 如需 % Time in GC 值計算方式的詳細資訊,請參閱 MSDN 網站上 Maoni's Weblog 的不同工具所回報效能資料之間的差異 - 4 項目 (英文)。 如果在記憶體回收期間發生分頁錯誤,或應用程式被電腦上的較高優先權工作先佔,% Time in GC 計數器就會反映這些額外的延遲。