Ado.net 连接池相关

一,连接池的概念

• 连接池是处于一个进程
  连接池控制多个连接,这多个连接必须是在一个进程之中,重用也是在同一个进程中重用
  (从服务器端角度讲,实际上一个应用程序还会包含多个应用程序域,一个应用程序域中可能包含多个连接池,appdomain)
 
  asp.NET里如果连接池程序寄存在IIS中,是基于底层数据库访问组件之上的
 
• 该进程保存连接并使其处于活动状态,使连接可以被重复使用

示例场景:在DB上层,创建webservice 在其中创建连接池,减轻DB压力

 

二,不使用连接池的DB连接建立过程

• 连接到数据源
  –建立物理通道(例如套接字或命名管道,网络连接)
  – 与服务器进行初次握手
  –分析连接字符串信息
  – 由服务器对连接进行身份验证
  – 运行检查以便在当前事务中登记

 

没有连接池的时候,要做的工作很多,每次都新建连接,浪费很多时间
实际上大型应用,不仅仅DB建立连接池,普通对象也可以建立对象池

 

三,连接池的好处

• 通过数据库连接池,应用程序可以重用池中现有的连接,而不必反复与数据库建立新的连接。

 

• 使用连接池可显著提高应用程序的可伸缩性,因为有限数量的数据库连接可以为数量大得多的客户端提供服务。

 

• 同时,由于可以节省建立新连接所需的大量时间,使用连接池还能够改善性能。

• 对于应用程序来说是透明的

 

四,连接池工作原理及过程

• Pooling 参数为true 时,连接池启用(连接字符串中设置,默认也为true)

 

• 两个连接的连接字符串相同时,被放置在一个连接池中

 

• 两个连接的连接字符串不同时,被放置在不同的连接池中

 

• 连接被Close 时,连接被放置在连接池中以备重用

 

• 连接被Dispose 时,连接被彻底删除

 

• 连接池最后一个连接被Close 时,连接池被删除

 

五,控制SQL Server 连接池

SQL Server 连接池有关的连接字符串变量

• Connection Lifetime 连接生存期默认值0 (设置为0,保证生命周期是最大的,不会退出)

 

• Connection Reset 连接重置默认值True
(保证每次连接数据库时,取得字符串中指定的新的连接,
否则会定向到别的数据库中.比如,在创建连接之前执行了 use【其他的数据库】的情况 )

 

• Enlist 登记默认值True(和事务相关)

 

• Max Pool Size 最大池大小默认值100


• Min Pool Size 最小池大小默认值0

 

• Pooling 池默认值True(是否启用连接池)

 

注意1※ 保证一致
• 连接是通过连接字符串上的完全匹配算法进行池化的。
• 池机制甚至对名称-值对之间的空格也敏感

 

注意2※ 关闭连接
• 使用完连接后,立即显示关闭连接

 

• 不要在类的Finalize方法中关闭连接
– 因为它在垃圾回收时才会执行
–很有可能会造成连接池已满

• DataAdapter在之前显式打开的连接不会自

动关闭,必须显示关闭
             只有自动打开的才会自动关闭

 

注意3※ 连接池的驻留问题
• 如果MinPoolSize 在连接字符串中未指定或指定为零,池中的连接将在一段时间不活动后关闭。

• 如果指定的MinPoolSize 大于零,在AppDomain 被卸载并且进程结束之前,连接池不会被破坏。

• 非活动或空池的维护只需要最少的系统开销。

 

注意4※ 手动清除连接池
• ClearAllPools
– 清除给定提供程序的连接池。

• ClearPool (参数sqlConnection, 通过连接字符串比较查找)
– 清除与特定连接关联的连接池。
– 如果在调用时连接正在使用,将进行相应的标记。连接关闭时,将被丢弃,而不是返回池中。

 

注意5※ 池碎片
• 池碎片是许多Web 应用程序中的一个常见问题,应用程序可能会创建大量在进程退出后才会释放的池。
这样,将打开大量的连接,占用许多内存,从而影响性能。
– 因为集成安全性产生的池碎片(连接用户不同,创建不同的进程)
– 因为许多数据库产生的池碎片

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值