当前位置: 网学 > 编程文档 > SQL SERVER > 正文

数据库的DataBase connection 简单池功能启示

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式

在开发社区网站时必须考虑的一个问题是网络用户的并发请求,除了增加Cache和静态化Html的常用手段外,优化Database的tables关系,及SQL 语句也是相当重要,但用户的并发请求Pages,常常会导致一些复杂业务的查询会有可能会出现Sql Connection Time out的错误,用户的并发请求用光了数据库的连接池,怎么办呢,要从根上解决问题是件不太好做的事,涉及的面和相关技术也很多,有数据库结构本身的问题也有代码的问题,也有服务器硬件的问题,但如果出现了以上的问题肯定会出现"红屏",这对于系统来说是一个大禁,这样的用户体验太差了,出现这样的错误对于用户来说是很不爽,对于专业的开发人员肯定认为这个网站技术做的不好,烂,那如何去解决这个问题,直接切入点就是把数据库的连接池管理起来,在代码里控制数据库的接个池大小,而不时由用户直接去请求数据库的连接池,中间业务逻辑上加一层来现对数据库连接的管理。

基本思路是这样,可以用泛型来做一个数据字典,实现对Sqlconnection的集合的维护。

基本过程:
   当用户请求SqlConnection时,先从可用的连接池中取出可用的SqlConnection连接直接返回经人用户,并且把当前正在用的SqlConnection设为锁定不可用状态。如果池中没有任何可用的,那么直接重新生成一个新的SqlConnection.

  当用户用完这个SqlConnection后,把它重新放回到池中等下一次请求。
同样用一个线程去跟踪池中可用连接串的状态,如果它的等待请求时间超过一个时间段如(从它的创建时间到它未使用的间隔时间一分钟未收到用户的请求)那么执行Close方法,让他回收到DataBase的连接池中。

注意ADO.net的SqlConnection的Close方法,其实并不是在物理上关闭连接,你可以用sp_who看是否还存在你的请求,只不过它的状仿是sleeping状态,只有等到没有用户请求,超过了他的过期时间后自动会消失释放资源,当然也可以在c#中释放非托管一SqlConnection资源,要通知GC回收。

DataAccess.ObjectPool.objectPool是用泛型来现实现的一个字典

基本代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DataAccess.DbConn
{
    /// <summary>
    /// 数据库连接对象池
    /// </summary>
    public class DBConn : DataAccess.ObjectPool.objectPool<SqlConnection>
    {
        /// <summary>
        /// 私有构造函数
        /// </summary>
        private DBConn()
        {
           
        }
        /// <summary>
        /// 返回自身对象(Singleton)
        /// </summary>
        public static readonly DBConn Instance= new DBConn();

        /// <summary>
        /// 默认连接语句
        /// </summary>
        //public static string DbPoolConnStr = DataAccess.Bas

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号