sqlite连接池的简单实现

     近期在一个数据推送服务器中,为了方便起见使用Sqlite作为数据库引擎,以方便部署。在初始版本中,为了方便全局访问,定义了一个DBHelper类作为数据库访问类,使用单实例,并使用一个静态方法GetInstance()。后面经过仔细思考,发现,这样可能会存在并发访问冲突,因此加入连接池机制来防止冲突。

  原理是这样:定义一个静态的DBHelper的栈对象,并且在初始化的时候创建N个连接。每次需要使用数据连接的时候调用GetInstance(),该函数先检测栈是否非空,是则弹出一个DBHelper对象,否则,创建一个新的DBHelper对象。在数据访问完成后,再调用ReleaseInstance将DBHelper对象压入栈中。

  下面给出代码,去除了DBHelper的业务逻辑部分。

    class DBHelper
    {
        private static Stack<DBHelper> mInstancePool = new Stack<DBHelper>();
        private static object mLockIntancePool=new object();

        public static DBHelper GetInstance()
        {
             DBHelper dbHelper = null;
             lock (mLockIntancePool)
             {
                 if (mInstancePool.Count != 0)
                 {
                     dbHelper = mInstancePool.Pop();
                 }
                 else
                 {
                     dbHelper = new DBHelper();
                 }
              }
             return dbHelper;
         }

        public static void ReleaseInstance(DBHelper dbHelper)
        {
            lock (mLockIntancePool)
            {
                mInstancePool.Push(dbHelper);
            }
        }      

        static DBHelper()
        {
            for (int i = 0; i < 10; i++)
            {
                mInstancePool.Push(new DBHelper());
            }
        }

        private DBHelper()
        {
            mConnection = SQLiteClass.CreateConnectionFromFile(@"data.db");
        }
}

 

转载于:https://www.cnblogs.com/ngxianyu/archive/2013/06/08/3126543.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值