zoukankan      html  css  js  c++  java
  • .Net Core-ObjectPool

    简介

    对象池化技术可以显著地提升性能,尤其是当对象的初始化过程代价较大或者频率较高。

    源码

    ObjectPool:对象池

    T Get():从对象池中获取对象。
    void Return(T obj):将对象放入对象池中。
    

    DefaultObjectPool:对象池的默认实现类

    它实现了Get和Return方法。其实对象池的本质就是它的中的 ObjectWrapper[] _items ,当使用Return方法是,将对象放入ObjectWrapper数组中。Get方法从数组中取。

    IPooledObjectPolicy

    主要作用是创建对象和将对象放入连接池中

    Create:定义一个创建对象的方法,当连接池中的数量不够取的时候,通过此方法创建对象。
    Return:将对象放入连接池中,如果放入成功,返回Ture.否则返回False.
    

    PooledObjectPolicy

    它是继承自IPooledObjectPolicy接口的抽象类

    DefaultPooledObjectPolicy:继承抽象类PooledObjectPolicy

    Create:定义一个默认创建对象的方法 new T()
    Return:不论是否放入连接池,全部返回True.
    

    ObjectPoolProvider

    创建对象池(ObjectPool)

    //通过Policy创建ObjectPool
    abstract ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy)
    

    DefaultObjectPoolProvider

    ObjectPoolProvider的默认实现类

    //创建一个可以容纳处理器数量X2的对象池
    ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy) 
    

    案例:

    不指定创建策略,使用new T()

    var objectPool = new DefaultObjectPoolProvider().Create<Person>();
    Person p1 = objectPool.Get();//ID=0,Name=null
    

    指定创建策略

    var objectPool = new DefaultObjectPoolProvider().Create<Person>(new PersonPoolPolicy());
    Person p1 = objectPool.Get();//ID=1,Name=fan
    

    策略:

        public class PersonPoolPolicy : PooledObjectPolicy<Person>
        {
            public override Person Create()
            {
                return new Person { ID = 1, Name = "fan" };
            }
    
            public override bool Return(Person p)
            {
                if (p.Name != "fan")
                {//不允许其他名称的对象放入对象池
                    return false;
                }
                return true;
            }
        }
    

    参考:
    https://www.cnblogs.com/MicroHeart/p/11701647.html

  • 相关阅读:
    使用jsonEditor打造一个复杂json编辑器
    【原创】一次“诡异”的容器Unix Socket通信问题分析
    【原创】Ingress-Nginx-Controller的Metrics监控源码改造简析
    IDEA+DevTools实现热部署功能
    ElementUI按需引入各种组件
    vue-cli4.0更新后怎样将eslint关闭
    Mysql修改字段名、修改字段类型
    博客搬家CSDN
    如何优雅的处理Restful
    java系列之注解
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/14277648.html
Copyright © 2011-2022 走看看