手机版

在中使用对象池 网络核心和源代码分析

时间:2021-08-19 来源:互联网 编辑:宝哥软件园 浏览:

一、对象池

对象池技术的应用可以显著提高性能,尤其是当对象的初始化过程非常昂贵或频繁时。以下是ObjectPool源代码中涉及的几个类。当你看过很多源代码的时候。Net Core,你会发现微软的很多开发都是这种模式,通过Policy构建一个提供者,通过Provider创建最终的类。

第二,使用

该组件的主要目的是将对象保存到对象池中,使用时直接获取,无需重新创建,从而实现对象的重用。但是有一个问题。如果起初对象池中没有对象,或者获取的对象数量大于对象池中的数量,该怎么办?当对象池中的对象数量不足时,此时需要通过策略创建对象来获取对象。至于如何创建对象,你需要实现它。如上所示,Policy有一个默认实现DefaultPooledObjectPolicy,它是由新的T()创建的。

DefaultObjectPoolUser defaultPool=new DefaultObjectPoolUser(new defaultpooledobjectpolicy user(),2);var firstUser=defaultPool。get();//从对象池中取一个对象,此时对象池中没有对象,返回age=0 name=null varuser 1=new user(){ age=18,name=' micro heart ' };var user2=新用户(){ Age=19,Name=' micro heart ' };var user3=新用户(){ Age=20,Name=' micro heart ' };默认池。return(user 1);//将对象放回对象池,但可能不会成功。对象池的数量有限制,也可以自定义限制,这样一些对象就不能放入对象池defaultPool。return(user 2);默认池。return(user 3);var u1=defaultPool。get();//从对象池中取出一个对象,返回第一个用户1 var u2=defaultPool。get();//从对象池中取出一个对象,返回第二个user2 var u3=defaultPool。get();//此时对象池中没有对象,所以得到对象调用的Policy的Create方法,DefaultPooledObjectPolicy的Create方法的实现是:new T(),所以返回Age=0 Name=null。在上面的示例中,当对象池中没有对象时,调用get方法,该方法实际上是新的T()。下面的对象添加了三个对象,但是对象池中只有两个空间,所以不能添加第三个。

现在自己创建一个新策略

公共类my user policy : pooledobjectpolicy user//需要继承抽象类{ public override user create(){ return new user(){ age=18,name=' micro heart ' };}公共覆盖bool Return(用户用户){ if(用户。Age==18)返回false返回真;} } DefaultObjectPoolUser DefaultPoolUser=new DefaultObjectPoolUser(new MyUserPolicy(),2);var firstUser=defaultPool。get();//返回age=0 name=null varuser 1=new user(){ age=18,name=' micro heart ' };var user2=新用户(){ Age=19,Name=' micro heart ' };var user3=新用户(){ Age=20,Name=' micro heart ' };默认池。return(user 1);默认池。return(user 2);默认池。return(user 3);var u1=defaultPool。get();//Reture user2。由于user1的年龄=18岁,策略中的保留筛选器条件返回false,因此第一个用户不能放入连接池。var u2=defaultPool。get();//返回user3 var u3=defaultPool。get();//返回Age=18 Name=MicroHeart。这是通过使用在策略中创建来创建的。3.源代码分析

IPooledObjectPolicyT:主要用于创建对象并将其放入连接池

Create:定义一个创建对象的方法,当连接池中的数量不够时,用这个方法创建一个对象。

返回:将对象放入连接池,如果放入成功,返回true。否则,返回false。DefaultPooledObjectPolicy:继承抽象类PooledObjectPolicyT,而抽象类继承接口IPooledObjectPolicyT。策略的默认实现类

创建:定义一个默认的创建对象的方法,new T();

返回:无论是否放入连接池,都返回真。

对象池提供程序:创建对象池

抽象对象池创建(iPooledobjectPolicy):通过策略创建对象池

DefaultObjectPoolprovider:ObjectPoolprovider的默认实现类

objectpool t create(ipoledobobjectpolicy):创建一个可以容纳X2处理器数量的对象池。

对象池:对象池

T Get():从对象池中获取对象。

Void Return(T obj):将对象放入对象池。

DefaultObjectPool:对象池的默认实现类,实现Get和Return方法。其实,对象池的本质是其中的ObjectWrapper[]_项;使用Return方法时,将对象放入ObjectWrapper数组中。Get方法从数组中获取。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

版权声明:在中使用对象池 网络核心和源代码分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。