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

  • 相关阅读:
    [Beta阶段]发布说明
    [技术博客]使用微信机器人监听群内招聘信息的过程及遇到的问题
    [Beta阶段]第十次Scrum Meeting
    [Beta阶段]第九次Scrum Meeting
    [技术博客]django连接mysql数据库的方法及部分问题的解决方法
    python学习06循环
    python学习05条件分支
    python学习04数据
    python学习03字符串基本操作
    python学习01python入门一
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/14277648.html
Copyright © 2011-2022 走看看