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.性能

相关文章
相关标签/搜索