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


減少分配大對象

ASP.NET Core中,垃圾回收器會自動分配及回收內存。這意味着開發人員不需要關心內存是何時,如何釋放的,但清理內存需要占用CUP時間,因此開發人員應盡量減少在“熱代碼路徑”上分配對象。垃圾回收在處理大對象(>85KB)時,代價很大。大對象存儲在大對象堆中,需要一個Full GC (2代對象回收),不同於0代和1代對象,2代對象回收需要暫停程序執行,頻繁的收集和分配大對象會導致性能不穩定。

建議操作:

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

前面講到的很多問題都可以通過 PerfView,查看垃圾回收狀態(GC)進行診斷,檢測項包括:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM