ASP.NET Core 性能最佳實踐(二)大對象及GC

減小分配大對象git

ASP.NET Core中,垃圾回收器會自動分配及回收內存。這意味着開發人員不須要關心內存是什麼時候,如何釋放的,但清理內存須要佔用CUP時間,所以開發人員應儘可能減小在「熱代碼路徑」上分配對象。垃圾回收在處理大對象(>85KB)時,代價很大。大對象存儲在大對象堆中,須要一個Full GC (2代對象回收),不一樣於0代和1代對象,2代對象回收須要暫停程序執行,頻繁的收集和分配大對象會致使性能不穩定。github

建議操做:api

  • 將頻繁使用的大對象緩存起來,以免高代價的內存分配。
  • 使用 ArrayPool<T>做爲緩存池,存儲大集合。
  • 不要在熱代碼路徑上分配大量,生命週期很短的大對象。

前面講到的不少問題均可以經過 PerfView,查看垃圾回收狀態(GC)進行診斷,檢測項包括:緩存

  • 垃圾回收暫停時間
  • 垃圾回收佔用的處理器百分比
  • 0代,1代,2代回收各有多少

更多內容請查看 Garbage Collection and Performance.性能

相關文章
相關標籤/搜索