建立池连接可以显著提高应用程序的性能和可缩放性。SQL Server .NET Framework 数据提供程序自动为 ADO.NET 客户端应用程序提供连接池(MSDN)。

Opening a database connection is a resource intensive and time consuming operation. Connection pooling increases the performance of Web/windows applications by reusing active database connections instead of creating a new connection with every request. Connection pool manager maintains a pool of open database connections. When a new connection requests come in, the pool manager checks if the pool contains any unused connections and returns one if available. If all connections currently in the pool are busy and the maximum pool size has not been reached, the new connection is created and added to the pool. When the pool reaches its maximum size all new connection requests are being queued up until a connection in the pool becomes available or the connection attempt times out.

Connection pooling behavior is controlled by the connection string parameters. Please look into MSDN documents in the reference link if you want to know further information.

前面是关于连接池知识的一些基本介绍,下面的内容是重点,也是个人见解。因为没有这方面的文档资料参考或者佐证,所以请各位仔细思考和讨论(我不想误导大家)。

下面分2种情况进行讨论。

1,Client端的windows form application通过ADO.Net直接访问后台Database。

我认为在这种情况下,每一个Client端和Database之间都存在一个连接池。通过设置ConnectiongString的Max Pool Size和Min Pool Size属性来验证。

如Max Pool Size = 5, Min Pool Size = 3, 通过SQL Server的SP_WHO2可以检测导如下结果:

启动1个Client端的Windows form application:application和SQL Server之间存在3个connection。

启动2个Client端的Windows form application:application和SQL Server之间存在6个connection。

启动3个Client端的Windows form application:application和SQL Server之间存在9个connection。

由此可见,每一个Client端和SQL Server之间都存在一个连接池,否则9个connection已经超出了Max Pool Size的设定。

2,Client端的application不直接通过ADO.Net来访问后台Database,而是通过IIS Server来同后台Database Server打交道。

至少有如下2种情况:

(1)Client通过IE访问部署在IIS中的web application,web application中的Data Access Class进一步访问后台Database Server.

(2)Client端的windows form application访问部署在IIS中的Remote Object,Remote Object进一步访问后台Database Server.

下面进行同样的测试:通过设置ConnectiongString的Max Pool Size和Min Pool Size属性来验证。

如Max Pool Size = 5, Min Pool Size = 3, 通过SQL Server的SP_WHO2可以检测导如下结果:

启动1个Client端的Web form application:application和SQL Server之间存在3个connection。

启动2个Client端的Web form application:application和SQL Server之间存在3个connection。

启动3个Client端的Web form application:application和SQL Server之间存在3个connection。

调用由IIS承载的Remote Object,结果类似。只是在未启动Client端之前,发现在Remote Object与Database Server之间已经存在一个connection。

由此可见,对同一个application而言,IIS Server与Database Server之间只有存在一个连接池,与Client端的多少没有关系。

3,连接池小节

根据上面的测试结果,显然第二种情况更有利于减少无用的连接数量,提高Database Server的性能。关于.Net Remoting技术及其性能问题,可以参考如下的Reference连接,这里就不讨论了。

另外,本文是个人关于连接池的一些见解,如果观点有不正确之处,希望不要误导各位。欢迎各位在此发表意见。同意的说赞同,不同意的请提出您的看法。谢谢。

Reference Links:

(1) MSDN, ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconconnectionpoolingforsqlservernetdataprovider.htm

(2) Microsoft .NET Remoting:技术概述, http://www.microsoft.com/china/MSDN/library/NetFramework/default.mspx

(3) 性能比较:.NET Remoting 与 ASP.NET Web 服务, http://www.microsoft.com/china/msdn/archives/library/dnbda/html/bdadotnetarch14.asp

转载于:https://www.cnblogs.com/DebugLZQ/archive/2011/08/25/2153615.html

关于ADO.Net连接池(Connection Pool)的一些个人见解相关推荐

  1. 连接池Connection Pool 单例设计

    连接池单例模式 1.私有化ComboPooledDataSource将其作为属性,使其实现单例 2.DataSourceFactory实现懒汉模式,这样作为属性的连接池cpds也就变为了单例 3.从连 ...

  2. 《ADO.NET 2.0高级程序设计》读书随笔(1)使用连接池connection pool

    转载于:https://www.cnblogs.com/xuxiaoguang/archive/2007/12/18/1004591.html

  3. 浅谈如何更好的打开和关闭ADO.NET连接池

    MS提倡我们尽可能每次的在连接使用完成后就关闭:这样导致每次都要进行打开和关闭操作或用using(){-}写起代码比较麻烦,还有经常对池的操作似乎也带来一些性能上的问题:在Asp.net里一个WebF ...

  4. 连接池-Connection pools

    1.为什么使用连接池 -创建连接需要消耗时间和资源 -Connection pools可以使在特定页面运行过后,连接能够保持下来 2.使用连接池和不使用连接池的比较 3.ADO.NET中的连接池 -如 ...

  5. sqlserver连接池Min Pool Size

    今天遇到了关于Sql Server最大连接数(Max Pool Size)的配置问题 Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 参考数据库 ...

  6. Ado.net连接池 sp_reset_connection 概念

    什么是连接池? 正常情况下,每次访问数据库都会打开和关闭,中断物理连接后需要再次进行物理连接.这样操作会浪费资源 使用连接池,主要的区别在于,不需要中断物理连接,即每次中断请求时spid还是存在! 原 ...

  7. 数据库连接池 Connection Pool 是什么,做什么

    重新拾起Java来学,就遇到了一本不错的书<Hibernate 深入浅出>电子工业出版社,相较其他的工具类书,本书中用词更加生动活泼,从字句之间就可以看出作者的用心与深厚的文字功底,让人相 ...

  8. java dbcp连接池,java – DBCP连接池connection.close()是否返回到池的连接

    如果我们执行getConnection(),则使用DBCP中的BasicDataSource,在finally块中我们关闭连接,它确实会返回到池的连接,或者是否关闭连接.我正在检查的代码片段就是这个 ...

  9. 数据库:数据库的连接池原理及实现

    对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...

  10. java数据源是什么_《java数据源—连接池》

    <java数据源-连接池> 1.数据源的分类:直接数据源.连接池数据源. 2.连接池.数据源.JNDI a.数据源:Java中的数据源就是连接到数据库的一条路径,数据源中并无真正的数据,它 ...

最新文章

  1. Spring Boot中Web应用的统一异常处理
  2. Android Jetpack架构组件之 Room(使用、源码篇)
  3. IT兄弟连 JavaWeb教程 EL表达式获取对象的属性以及数组的元素
  4. php redis新增数据类型,Redis有哪几种数据类型
  5. C语言——字符串函数
  6. 网络爬虫-获取网页中的数据加伪装头,伪装成浏览器多次访问,避免单次访问导致ip被封
  7. 设计资源 | 万圣节矢量图标
  8. 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法
  9. 19年春第十五周学习
  10. 什么是信息系统安全等级保护
  11. 微信小程序上传图片解决方案+oss+后端代码
  12. 今天拿到小米正式Offer啦
  13. 微信账号和系统账号绑定
  14. 阿波罗java_携程Apollo(阿波罗)配置中心的Java样例客户端启动和调试
  15. C#中转义字符\r, \n, \r\n, \t, \b, @作用
  16. php 获取hashcode,产生runnable
  17. linux设置rtc默认时间,RTCTime 设置和使用 详解
  18. iOS中 流媒体播放和下载 韩俊强的博客
  19. 华硕fl8000u是什么型号_华硕fl8000u参数 华硕顽石五代fl8000什么配置?
  20. 开源书籍和网站:free-programming-books

热门文章

  1. 将system.out.println的输出,输出调用类等其他参数的方法
  2. idea查看多级父类,实现的接口和子类的层次结构图
  3. mybatis plugins_[Mybatis]-[基础支持层]-插件-多个插件执行顺序
  4. JavaScript之函数实例属性和类属性
  5. [渝粤教育] 江西外语外贸职业学院 商务英语口语与实训 参考 资料
  6. [渝粤教育] 西南科技大学 电子技术基础 在线考试复习资料
  7. 经典机器学习系列(二)【线性判别分析LDA】
  8. 洛谷 P2488 [SDOI2011]工作安排
  9. Web API 路由 [二] Attribute Routing
  10. Unity编辑器扩展之RequireComponent等详解