減少分配大物件
ASP.NET Core中,垃圾回收器會自動分配及回收記憶體,這意味著開發人員不需要關心記憶體是何時,如何釋放的,但清理記憶體需要占用CUP時間,因此開發人員應盡量減少在“熱代碼路徑”上分配物件,垃圾回收在處理大物件(>85KB)時,代價很大,大物件存盤在大物件堆中,需要一個Full GC (2代物件回收),不同于0代和1代物件,2代物件回收需要暫停程式執行,頻繁的收集和分配大物件會導致性能不穩定,
建議操作:
- 將頻繁使用的大物件快取起來,以避免高代價的記憶體分配,
- 使用 ArrayPool<T>作為快取池,存盤大集合,
- 不要在熱代碼路徑上分配大量,生命周期很短的大物件,
前面講到的很多問題都可以通過 PerfView,查看垃圾回收狀態(GC)進行診斷,檢測項包括:
- 垃圾回收暫停時間
- 垃圾回收占用的處理器百分比
- 0代,1代,2代回收各有多少
更多內容請查看 Garbage Collection and Performance.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/76638.html
標籤:.NET Core
