• 则您需要负责打开 SqlConnection 对象,而且,更重要的是,在查询结束时关闭该对象。如果您忘记了进行关闭,孤立连接会迅速地积累起来。
  • 监视连接数 
    • 为了对孤立连接和发生溢出的连接池进行测试,我编写了一个 Web 窗体的示例应用程序。此应用程序使用的方法与您通常用于从查询返回数据的方法相同。(您可以在 http://www.sqlmag.com 上下载此代码的 WinForms 版本。)
    • 我使用了清单 1 中的代码来打开和关闭到 Web 窗体应用程序的连接。标注 A 中的例程针对 110 个新的 SqlConnection 对象创建、打开和执行查询 — 比默认的池大小多 10 个连接。您必须在离开该例程之前关闭和放弃所有这些连接。如果不这样做,SqlConnection 对象将连同关联的池连接一起被孤立。ADO.NET 池机制 (aka the pooler) 关闭数据库连接,但不关闭池连接。我将连接池大小设置为 10,以便使该程序更快地失败 — 如果该程序会失败的话。通常,10 个连接对于一个运行速度象这个查询一样快的查询来说已经足够了。许多开发人员运行着忙碌的 Web 站点,这些 Web 站点使用不到五个连接来处理每天的几十万次点击。
    • 标注 A 中的例程创建 SqlConnection 对象和 SqlCommand 对象,设置 CommandText,并打开连接。然后,标注 B 中的代码确定执行 DataReader 时是否使用 CommandBehavior.CloseConnection,这取决于用户在 Web 窗体上选择了哪些 CheckBox 控件。
    • 在标注 C 的代码中,我指定是否将 DataReader 行集绑定到 DataGrid,或者是否在整个行集中进行循环。标注 C 的代码测试当您到达通过 DataReader 从数据提供程序传递回来的行集的末尾时会发生什么事情。
    • 现在,我使用标注 D 中的代码来指定是手工关闭连接还是让某个其他操作(例如,数据绑定)来完成这项工作。坦白地说,以手工方式关闭连接通常是最安全的,因此,您可以肯定连接不会被孤立。
    • 如果代码成功地运行到这一步,说明我已经成功地打开和关闭了 110 个连接。不过,如果出了问题,标注 E 的代码中的异常处理程序会将异常(通常是 Timeout)作为 InvalidOperationException 捕获,该异常是连接池已满时 ADO.NET 的响应方式。
    • 表 1 汇总了各个选项使例程成功运行或失败的方式。请注意,如果您不设置 CommandBehavior.CloseConnection 选项,您的操作最终会失败 — 即使在使用绑定控件的情况下也是如此。即使您使用该选项,但如果您没有使用复杂的绑定控件,或者没有手工关闭 SqlDataAdapter 或 SqlConnection,该进程仍然会失败。
    • 当我结束了这些示例应用程序的运行后,我已经生成了 1000 多个以上的池连接 — 所有连接均处于孤立状态。虽然“SQL Server 用户连接”计数为 0,但留下大约 40 个连接池。在我重新引导系统之前,孤立的池不会消失。
    • 我用于此测试的示例应用程序包括使用 DataAdapter 来返回行的例程。除非您手工管理连接,否则,DataAdapter 将正确地打开和关闭 SqlConnection 对象,因此,您不太可能遇到孤立的池连接。不过,如果您的应用程序同时使用 DataReader 和 DataAdapter,您可能会发现,如果某个连接与一个未关闭的 DataReader 相关联,则 DataAdapter 无法针对该连接运行查询。
    • 确定连接池何时达到最大连接数
    • 正如我在 "Swimming in the .NET Connection Pool" 一文中讨论的那样,当连接池达到您通过 "Max Pool Size ConnectionString" 选项指定的最大连接数时,ADO.NET 将阻止任何随后打开额外连接的尝试。如果某个连接在您在 "ConnectionTimeout 选项中指定的时间之前变为可用,。NET 数据提供程序将向您的应用程序传递一个指向该连接的指针,以便将控件返回给应用程序。不过,如果没有及时释放任何连接,连接请求将引发 InvalidOperationException 异常。
    • 现在您必须决定要采取的措施,我不建议您告诉用户您已经用完了所有连接。有些应用程序会通知用户系统正忙于帮助其他客户,并建议用户稍后进行访问。其他应用程序则播放一段动画,通知用户系统尚未死锁,而是正在忙于处理他们的请求。同时,您的代码重新尝试操作。在所有情况下,您应该记录这些故障,以便帮助诊断问题的症结所在,并记录您已经耗尽了资源。

转载于:https://www.cnblogs.com/alwaysonline/archive/2012/12/14/2817581.html

[转].NET 数据库连接池相关推荐

  1. c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记

    现在 主流的数据库连接池有:Proxool.C3P0.DBCP.tomcat-jdbc.Druid.其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池. Tomcat 在 7.0 ...

  2. Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10

    问题描述: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10at com.alibab ...

  3. Druid数据库连接池使用参考

    一:添加相应依赖 druid-1.0.9.jar: mysql-connector-java-5.1.48-bin.jar 二:编写properties文件 放置位置在src中: driverClas ...

  4. mysql连接池为何不用nio_为什么要用数据库连接池?

    1.为什么要用数据库连接池? 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源占用比 ...

  5. net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 发布时间:2019-02-18 22:05, 浏览次数:1152 , 标签: EF Core DbContextPool ...

  6. 数据库连接池,实现及分析

    在我们日常对数据库操作时存在一个问题,要为每次数据操作请求建立一个数据库连接.而每次建立连接都需要花费很多开销,如加载驱动类.注册驱动.获取连接,这样如果在短时间内连接多次,就 会耗费多余的时间(加载 ...

  7. swoole实现数据库连接池

    2019独角兽企业重金招聘Python工程师标准>>> 原生 PHP CURD 让我们来回顾一下PHP中数据库的使用 <?php # curd.php$id = 1;$dbh ...

  8. 聊一个不常见的面试题:为什么数据库连接池不采用 IO 多路复用?

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题.IO多路复用被视为是非常 ...

  9. 为什么数据库连接池不采用 IO 多路复用?

    欢迎关注方志朋的博客,回复"666"获面试宝典 接着,今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题.IO多路复用被视为 ...

  10. 数据库连接池为什么要用threadlocal呢?不用会怎样?

    点击关注公众号,Java干货及时送达 来源:blog.csdn.net/qq_42405666/article/details/108258820 这个问题我疑问了很久很久,主要如下截图. 个连接对应 ...

最新文章

  1. python下载后如何使用-如何使用python下载文件?
  2. mysql select time,MySql查询时间段的方法
  3. synchronized与java.util.concurrent.locks.Lock的相同之处和不同之处
  4. python调用robotframework_robotframework+python接口自动化的点滴记录(2)
  5. QPW 用户签到日志表(tf_user_signin_log)
  6. 数字图像处理实验四图像频域增强
  7. VisualStudio解决方案配置Debug和Release选项
  8. Hibernate讲解(三)-Hibernate的基本映射数据类型
  9. (转)JVM——内存管理和垃圾回收
  10. MySQL 高阶语句
  11. 如何免费将一个PDF拆分成多个文件?
  12. [转自有道]十六种英语时态傻傻分不清?一篇文章告诉你它们的所有用法
  13. 分治策略-股票获取最大收益-最大子数组问题
  14. 【Python办公自动化】使用reportlab制作pdf报告
  15. 又拍云 php sdk,GitHub - totoleo/php-sdk: UPYUN PHP SDK
  16. python接口自动化搭配Gitlab 和jenkins持续集成
  17. Linux兄弟连视频教程—B站评论区总结
  18. js 删除字符串中第一个逗号
  19. Leecode-SQL 1407. 排名靠前的旅行者
  20. hc-05蓝牙模块调试

热门文章

  1. php 提取登录QQ,php QQ登录
  2. core和node开发小程序_成都小程序开发:微信小程序开发要多少钱?
  3. 服务器自检后显示scsi,请问一下,如何检测SCSI +RAID 5设置是否正确??
  4. java 判断crontab_crontab详解
  5. app 隔几秒记录当前经纬度位置_uni-app获取位置经纬度并定位到当前位置
  6. lisp 线性标注自动避让_CAD局部放大图如何标注对应的尺寸,才能保持尺寸值不变...
  7. 医学影像设备学_医学影像技术考研可选的六大院校
  8. Matplotlib入门
  9. Azkaban通过API动态传递参数
  10. 终于可以摆脱 Pipenv 这坑货了