项目常用算法之一个C#资源池的实现

这个资源池用来管理程序的宝贵资源。

主要的类是ResourcePool<T>。

用户可以通过调用GetResource方法请求一个资源,用完之后通过ReturnResource归还给资源池。由资源池决定什么时候释放多余的资源。

接口IResourceProvider<T>用来获得资源。

类ResourceTag<T>用来标志资源是否在用。

具体的就不多说了,请看代码。欢迎讨论。

先是测试代码:

 1 using System;
  2 using NUnit.Framework;
  3 using System.Data.SqlClient;
  4 public class SqlConnectionProvider: IResourceProvider<SqlConnection>
  5 {
  6    public SqlConnection Request()
  7    {
  8         SqlConnection con= new SqlConnection();
  9         //在此打开数据库连接,因为ResourcePool要求管理那些能用的资源。
10         //con.Open();
11         return con;
12    }
13    public void Dispose(SqlConnection con)
14    {
15         //在此销毁对象
16         con.Dispose();
17    }
18 }
19 [TestFixture]
20 public class Test
21 {
22     [Test]
23     public void TestPool()
24     {
25         //此处初始化资源池,参数:一个资源提供类和一个最大资源池中最大资源数目
26         ResourcePool<SqlConnection> pool=ResourcePool<SqlConnection>.Instance(new  SqlConnectionProvider(),10);
27
28         long resourceID;
29         SqlConnection con=pool.GetResource(out resourceID);
30         //在此处使用con对象
31
32         //用完就归还
33         pool.ReturnResource(ref con,resourceID);
34
35
36     }
37 }

(以上测试只是简单的演示功能,详细的测试代码跟项目其他类有关,贴上反而复杂)

时间: 2024-08-31 16:10:41

项目常用算法之一个C#资源池的实现的相关文章

项目常用算法之Nhibernate三层结构

本文简单比较了动软三层结构和"Nhibernate三层结构". (1)动软三层架构 刚开发ASP.Net应用时,使用动软自动生成的三层架构,用起来方便.就是改动起来麻烦.比如要加一 个查询数据的方法,先在DAL层添加接口方法,再到SQLServerDAL层添加实现代码,再到BLL层添加一个包 装方法.向某个表里添加一个字段,就得重新生成一遍,要不然就自己一层一层改. IDAL层,可以由OracleDAL或DB2DAL来实现,目的是屏蔽数据操作的细节.BLL层是有必要的,封装业 务处理逻

常用算法和复杂度总结

一.常用算法和复杂度 算法 名称 复杂度 备注 快速排序 QuickSort(A,p,r) 最坏:O(n2) 平均:O(nlog n) 均衡划分:O(nlog n)   合并排序 MergeSort(A,p,r) O(nlog n)   选最大 FindMax O(n)   选最大和最小 FindMaxMin W(n)=3n/2-2=O(n)   找第二大 锦标赛法 n+logn-2   选择第k小 Select O(n)   动态规划:矩阵连乘 MatrixChain(P,n) 递归:O(2n

仿STL中的堆算法的一个实现

RT. 堆的性质之类的不再这里阐述,写这个算法只为了更好的理解STL中的堆算法,如果看不懂STL中的算法也可以来参考这里给出的算法,因为是纯C的看起来会省去很多语言方面的细节. 同时里面还有一个STL中对应算法的测试以比较两者的效果. /******************************************************************** created: 2007/3/18 filename: main.cpp author: Lichuang purpose

php计算两个整数的最大公约数常用算法小结

 这篇文章主要介绍了php计算两个整数的最大公约数常用算法,实例总结了求最大公约数的三种常用方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php计算两个整数的最大公约数常用算法.分享给大家供大家参考.具体如下:   代码如下: <?php //计时,返回秒 function microtime_float () { list( $usec , $sec ) = explode ( " " , microtime ()); return ((float)

B/S项目结束,又是一个新的开始

    在软考后,B/S项目也结束了.从今年的三月份,到现在的十一月份,历时八个月,期间有过因为合作.参与项目.软考等方面原因中断,而原本计划在半年完成的项目用了八个月.     学习完B/S项目,看着今目标上一个大项下完成了一个个的小项,好像收获很多,但自己总是觉得学习过后,什么也没有留下,对于B/S模式下的开发,我还处于一片茫然的状态.对于技术知识的总结,已经写过一篇博客,<我的第100篇CSDN博客>.这一篇博客,主要是对自己的学习管理.方法.态度.思想等方面进行一个反省.     从最

【阿里云大学课程】机器学习入门:概念原理及常用算法

AlaphaGo与围棋界的较量,吸引了全世界的目光,也让大家见识到了机器学习与人工智能技术的强大之处.你是不是也想学机器学习了? 机器学习是人工智能的一个分支.人工智能的研究是从以"推理"为重点到以"知识"为重点,再到以"学习"为重点,一条自然.清晰的脉络.显然,机器学习是实现人工智能的一个途径,即以机器学习为手段解决人工智能中的问题. 在维基百科中,机器学习有下面几种定义: 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如

JS实现的几个常用算法_javascript技巧

(1)数组去重 原理:定义一个对象obj,然后把数组元素作为obj的属性名,利用属性名是否重复进行判重 var unique = function(arr){ let obj = {}; let newArr = []; arr.forEach(function(x){ if(!obj[x]){ //如果对象中没有该元素对应的属性 obj[x] = true; newArr.push(x); } }); return newArr; } (2)使用快速排序算法对数组进行排序 这里面包括两种效果,

php计算两个整数的最大公约数常用算法小结_php技巧

本文实例讲述了php计算两个整数的最大公约数常用算法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php //计时,返回秒 function  microtime_float () {     list( $usec ,  $sec ) =  explode ( " " ,  microtime ());     return ((float) $usec  + (float) $sec ); } /////////////////////////////////

轻松看懂机器学习十大常用算法

通过本篇文章可以对ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题. 每个算法都看了好几个视频,挑出讲的最清晰明了有趣的,便于科普. 以后有时间再对单个算法做深入地解析. 今天的算法如下: 决策树 随机森林算法 逻辑回归 SVM 朴素贝叶斯 K最近邻算法 K均值算法 Adaboost 算法 神经网络 马尔可夫 1. 决策树 根据一些 feature 进行分类,每个节点提一个问题,通过判断,将数据分为两类,再继续提