欢迎来到天天文库
浏览记录
ID:10748802
大小:82.50 KB
页数:11页
时间:2018-07-08
《基于 net 并行库写的对象池》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于.NET并行库写的对象池ObjectPoolBase类,大家不用去了解TObjectPool,TObjectPoolDomain,TObjectDomain三个泛型参数,改成一个TObject也可以使用。其构造中的四个参数分别代表:minSize:池中最少个数maxSize:池中最大个数growSize:增长/回收个数maintenanceMilliseconds:维护间隔运行机制:在BorrowObject时,如果可以在FREES中取得对象则返回,如果获取失败,则当池中对象个数小于最大个数时,创建对象,否则等待对象返还并重试。当使用完对象时可通过ReturnObject返还对
2、象,对象池在指定的maintenanceMilliseconds的间隔内会维护池子的大小,可重载对象池的OnCreateObject创建对象,OnDestroyObject销毁对象,OnActiveObject激活对象和OnDeactivate使对象进入休眠,可使用USING语句在跳出代码块是自动返还对象。using(varpo=ObjectPool.GetPoolPoolObject()){ po.Object.xxx(); ....}具体代码如下:publicabstractclassObjectPoolBase3、TObject,TObjectDomain>whereTObjectPool:ObjectPoolBasewhereTObject:class{staticObjectPoolBase(){Instance=ContainerManager.Resolve();ObjectPoolManager.Instance.RegisterObjectPool4、ject,TObjectDomain>(Instance);}http://www.027hpit.compublicstaticTObjectPoolInstance{get;privateset;}publicstaticIPoolObjectGetPoolObject(){returnnewInternalPoolObject();}privateConcurrentBagfrees;privateConcurrentDictionaryborrowed;privatelongcount;privateintmi5、nSize;privateintgrowSize;privateintmaxSize;privatelongmaintenanceMilliseconds;privateTimermaintenanceTimer;privateAutoResetEventare;privatevolatileboolexit;protectedObjectPoolBase(intminSize,intgrowSize,intmaintenanceMillseconds):this(minSize,int.MaxValue,growSize,maintenanceMillseconds){}publ6、icObjectPoolBase(intminSize,intmaxSize,intgrowSize,intmaintenanceMillseconds){CheckUtility.ArgumentPositiveNumber(minSize,"minSize");CheckUtility.ArgumentPositiveNumber(growSize,"growSize");CheckUtility.ArgumentPositiveNumber(maintenanceMillseconds,"maintenanceMillseconds");CheckUtility.Argume7、ntGreaterThanArgument(minSize,"minSize",maxSize,"maxSize");this.minSize=minSize;this.growSize=growSize;this.maxSize=maxSize;this.maintenanceMilliseconds=maintenanceMillseconds;this.frees=newConcurrentBag();http://www.027hpit.co
3、TObject,TObjectDomain>whereTObjectPool:ObjectPoolBasewhereTObject:class{staticObjectPoolBase(){Instance=ContainerManager.Resolve();ObjectPoolManager.Instance.RegisterObjectPool4、ject,TObjectDomain>(Instance);}http://www.027hpit.compublicstaticTObjectPoolInstance{get;privateset;}publicstaticIPoolObjectGetPoolObject(){returnnewInternalPoolObject();}privateConcurrentBagfrees;privateConcurrentDictionaryborrowed;privatelongcount;privateintmi5、nSize;privateintgrowSize;privateintmaxSize;privatelongmaintenanceMilliseconds;privateTimermaintenanceTimer;privateAutoResetEventare;privatevolatileboolexit;protectedObjectPoolBase(intminSize,intgrowSize,intmaintenanceMillseconds):this(minSize,int.MaxValue,growSize,maintenanceMillseconds){}publ6、icObjectPoolBase(intminSize,intmaxSize,intgrowSize,intmaintenanceMillseconds){CheckUtility.ArgumentPositiveNumber(minSize,"minSize");CheckUtility.ArgumentPositiveNumber(growSize,"growSize");CheckUtility.ArgumentPositiveNumber(maintenanceMillseconds,"maintenanceMillseconds");CheckUtility.Argume7、ntGreaterThanArgument(minSize,"minSize",maxSize,"maxSize");this.minSize=minSize;this.growSize=growSize;this.maxSize=maxSize;this.maintenanceMilliseconds=maintenanceMillseconds;this.frees=newConcurrentBag();http://www.027hpit.co
4、ject,TObjectDomain>(Instance);}http://www.027hpit.compublicstaticTObjectPoolInstance{get;privateset;}publicstaticIPoolObjectGetPoolObject(){returnnewInternalPoolObject();}privateConcurrentBagfrees;privateConcurrentDictionaryborrowed;privatelongcount;privateintmi
5、nSize;privateintgrowSize;privateintmaxSize;privatelongmaintenanceMilliseconds;privateTimermaintenanceTimer;privateAutoResetEventare;privatevolatileboolexit;protectedObjectPoolBase(intminSize,intgrowSize,intmaintenanceMillseconds):this(minSize,int.MaxValue,growSize,maintenanceMillseconds){}publ
6、icObjectPoolBase(intminSize,intmaxSize,intgrowSize,intmaintenanceMillseconds){CheckUtility.ArgumentPositiveNumber(minSize,"minSize");CheckUtility.ArgumentPositiveNumber(growSize,"growSize");CheckUtility.ArgumentPositiveNumber(maintenanceMillseconds,"maintenanceMillseconds");CheckUtility.Argume
7、ntGreaterThanArgument(minSize,"minSize",maxSize,"maxSize");this.minSize=minSize;this.growSize=growSize;this.maxSize=maxSize;this.maintenanceMilliseconds=maintenanceMillseconds;this.frees=newConcurrentBag();http://www.027hpit.co
此文档下载收益归作者所有