项目常用算法之 一个C#资源池的实现
2009-03-23 08:20:42 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

这个资源池用来管理程序的宝贵资源。
主要的类是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 }
更多精彩
赞助商链接