.NET对象池的使用及其扩展: Microsoft.Extensions.ObjectPool

对象池介绍

池化并不是什么新鲜的技术,它更像一种软件设计模式,主要功能是缓存一组已经初始化的对象,以供随时可以使用。对象池大多数场景下都是缓存着创建成本过高或者需要重复创建使用的对象,从池子中取对象的时间是可以预测的,但是新建一个对象的时间是不确定的。

当需要一个新对象时,就向池中借出一个,然后对象池标记当前对象正在使用,使用完毕后归还到对象池,以便再次借出。

常见的使用对象池化场景:

  • 对象创建成本过高。对象池可提高性能
  • 需要频繁的创建大量重复对象,会产生很多内存碎片。对象池可减少内存碎片
  • 同时使用的对象不会太多
  • 常见的具体场景如数据库连接池、线程池等。

注意: 使用对象池化也有一些需要注意的地方,比如归还对象时应确保对象已经被重置为可以重复使用的状态。同时也要注意,使用池化时要根据具体的场景合理的设置池子的大小,过小达不到想要的效果,过大会造成内存浪费。

对象池的使用

扩展默认对象池

默认对象池(Microsoft.Extensions.ObjectPool.DefaultObjectPool)仅提供了对象的创建, 借出, 归还, 有时我们还需要借出的对象长期存在, 那么我们还可以实现对象池释放, 清空等操作。

扩展阅读

.NET对象池的使用
通过 ASP.NET Core 中的 ObjectPool 重用对象
GameFramework解析:对象池 (Object Pool)

此处评论已关闭