.NET对数据库连接已经提供了连接池, 但是测试结果是效率差些,对新连接的处理过多的使用了Close和Open, 这里进行优化之后,可以节省时间.
public class DBPool { private class SqlConnectionObject : IDynamicObject { private SqlConnection _SqlConn; public SqlConnectionObject() { _SqlConn = null; }
#region IDynamicObject Members
public void Create(Object param) { String strConn = (String)param; _SqlConn = new SqlConnection(strConn); _SqlConn.Open(); }
public Object GetInnerObject() { // TODO: Add SqlConnectionObject.GetInnerObject implementation return _SqlConn; }
public bool IsValidate() { return ( _SqlConn != null && _SqlConn.GetHashCode() > 0 && _SqlConn.State == ConnectionState.Open ); }
public void Release() { // TODO: Add SqlConnectionObject.Release implementation _SqlConn.Close(); }
#endregion }
private ObjectPool _Connections;
public DBPool(string connection, int initcount, int capacity) { if(connection == null || connection == "" || initcount<0 || capacity < 1) { throw(new Exception("Invalid parameter!")); }
_Connections = new ObjectPool(typeof(SqlConnectionObject),connection,initcount,capacity); }
public SqlConnection GetConnection() { return (SqlConnection)_Connections.GetOne(); }
public void FreeConnection(SqlConnection sqlConn) { _Connections.FreeObject(sqlConn); }
public void Release() { _Connections.Release(); }
public int Count { get{return _Connections.CurrentSize;} }
public int UsingCount { get{return _Connections.ActiveCount;} }
public int DecreaseSize(int size) { return _Connections.DecreaseSize(size); } } // DBPool |