摘录自MSDN:

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

客户端应用程序提供连接池。您也可以提供几个连接字符串修饰符来控制连接池行为,请参见本主题内下文中“使用连接字符串关键字控制连接池”这一节。

池的创建和分配

当连接打开时,将根据一种精确的匹配

在以下示例中,将创建三个新的 SqlConnection

对象,但只需要使用两个连接池来管理这些对象。请注意,第一个和第二个连接字符串的差异在于为 Initial

Catalog 分配的值。

SqlConnection conn = new SqlConnection();

conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";

conn.Open();

// Pool A is created.

SqlConnection conn = new SqlConnection();

conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=pubs";

conn.Open();

// Pool B is created because the connection strings differ.

SqlConnection conn = new SqlConnection();

conn.ConnectionString = "Integrated Security=SSPI;Initial Catalog=northwind";

conn.Open();

// The connection string matches pool A.

连接池一旦创建,直到活动进程终止时才会被毁坏。非活动或空池的维护只需要最少的系统开销。

连接的添加

连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。

当请求 SqlConnection

对象时,如果存在可用的连接,则将从池中获取该对象。若要成为可用连接,该连接当前必须未被使用,具有匹配的事务上下文或者不与任何事务上下文相关联,并且具有与服务器的有效链接。

如果已达到最大池大小且不存在可用的连接,则该请求将会排队。当连接被释放回池中时,连接池管理程序通过重新分配连接来满足这些请求。对

Connection 调用 Close 或 Dispose 时,连接被释放回池中。

警告建议使用完 Connection

后始终将其关闭,以便连接可以返回到池中。这可以使用 Connection 对象的 Close 或 Dispose

方法来实现。不是显式关闭的连接可能不会添加或返回到池中。例如,如果连接已超出范围但没有显式关闭,则仅当达到最大池大小而该连接仍然有效时,该连接才会返回到连接池中。

注意   不要在类的 Finalize 方法中对

Connection、DataReader 或任何其他托管对象调用 Close 或

Dispose。在终结器中,仅释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,则不要在类定义中包含 Finalize

方法。有关更多信息,请参见垃圾回收编程。

连接的移除

如果连接生存期已过期,或者连接池管理程序检测到与服务器的连接已断开,连接池管理程序将从池中移除该连接。请注意,只有在尝试与服务器进行通信后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。连接池管理程序会定期扫描连接池,查找已释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。

如果存在与已消失的服务器的连接,那么即使连接池管理程序未检测到已断开的连接并将其标记为无效,仍有可能将此连接从池中取出。当发生这种情况时,将生成异常。但是,为了将该连接释放回池中,仍必须将其关闭。

事务支持

连接是根据事务上下文来从池中取出并进行分配的。请求线程和所分配的连接的上下文必须匹配。因此,每个连接池实际上又分为不具有关联事务上下文的连接以及

N 个各自包含与一个特定事务上下文的连接的子部分。

当连接关闭时,它将被释放回池中,并根据其事务上下文放入相应的子部分。因此,即使分布式事务仍然挂起,仍可以关闭该连接而不会生成错误。这样,您就可以在随后提交或中止分布式事务。

使用连接字符串关键字控制连接池

SqlConnection 对象的 ConnectionString

属性支持连接字符串键/值对,这些键/值对可用于调整连接池逻辑的行为。

下表描述了可用于调整连接池行为的 ConnectionString 值。

名称

默认值

说明

Connection Lifetime

0

当连接返回到池中时,将对它的创建时间和当前时间进行比较,如果时间间隔超过由Connection Lifetime

指定的值(以秒为单位),则会毁坏该连接。在聚集配置中可以使用它来强制在运行服务器和刚联机的服务器之间达到负载平衡。

如果值为零 (0),则将使池连接具有最大的超时期限。

Connection Reset

'true'

确定在从池中移除数据库连接时是否将其重置。对于 Microsoft SQL Server 版本 7.0,如果设置为false,将避免在获取连接时经历一个额外的往返过程,但必须注意的是连接状态(如数据库上下文)不会被重置。

Enlist

'true'

当为true 时,如果存在事务上下文,池管理程序将自动在创建线程的当前事务上下文中登记连接。

Max Pool Size

100

池中允许的最大连接数。

Min Pool Size

0

池中维护的最小连接数。

Pooling

'true'

当为true时,将从相应的池中取出连接,或者在必要时创建连接并将其添加到相应的池中。

连接池的性能计数器

SQL Server .NET Framework

数据提供程序添加了几个性能计数器,它们将使您能够微调连接池特性,检测与失败的连接尝试相关的间歇性问题,并检测与对 SQL Server

的超时请求相关的问题。

下表列出了可以在“.NET CLR 数据”性能对象下的“性能监视器”中访问的连接池计数器。

计数器

说明

SqlClient: Current # pooled and non pooled connections

当前池连接或非池连接的数目。

SqlClient: Current # pooled connections

当前所有池中与特定进程关联的连接的数目。

SqlClient: Current # connection pools

当前与特定进程关联的池的数目。

SqlClient: Peak # pooled connections

自特定进程开始以来所有池中的连接数峰值。请注意:此计数器只有在与特定进程实例关联时才可用。_Global

实例始终返回 0。

SqlClient: Total # failed connects

打开连接的尝试因任何原因而失败的总次数。

注意   将 SQL Server .NET Framework

数据提供程序性能计数器与 ASP.NET 应用程序一起使用时,只有 _Global 实例是可用的。因此,性能计数器返回的值是所有 ASP.NET

应用程序的计数器值的总和。

ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园相关推荐

  1. mysql 连接池的作用,数据库连接池介绍、主要参数设置、作用

    数据库连接池 dataSource 1.平时用的数据库类型?? dbcp  c3p0 2.连接池需要那些配置?? 初始化连接数量initialSize 最大连接数maxActive 最大空闲连接数ma ...

  2. oracle mysql连接池配置文件_数据库连接池两种配置方式详解

    数据库连接池: 负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接 ...

  3. java 连接池_初探数据库连接池

    参考资料 数据库连接池学习笔记(一):原理介绍+常用连接池介绍 java数据库连接池实现原理 高性能数据库连接池的内幕 1. 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户 ...

  4. mysql jdbc批处理_JDBC批处理 数据库连接池

    关于JDBC Jdbc是java database connectivity的简称,java数据库连接,专门用来通过一段java代码连接数据库的一门技术. 使用方法大致为一下六个步骤: 一.注册驱动 ...

  5. 数据库连接池及C3P0数据库连接池技术

    数据库连接池(重要) 注意数据库连接池只是简化获得数据库连接对象和关流的部门 1.数据库连接池: 1.概念: 其实就是一个容器(在Java中就是集合),存在数据库连接的容器,当系统初始化好后,容器被创 ...

  6. 池化技术-数据库连接池

    池化技术-数据库连接池 简介 数据库连接池 什么是数据库连接池 长连接和连接池的区别 数据库连接池运行机制 连接池和线程池的关系 连接池的连接数量 数据库连接池的设计 设计思路 设计逻辑 构造函数 初 ...

  7. ado.net mysql 连接池_ADO.NET中SQL Server数据库连接池

    实际上,大多数应用程序仅使用一个或几个不同的连接配置. 这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭. 为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法. 连接池减少 ...

  8. ado.net mysql 连接池_ADO.NET数据连接池

    [IT168 技术文档]21世纪什么最贵?数据库连接.对于以数据库做数据存储基石的应用系统来说,数据库连接是整个系统中最珍贵的资源之一.数据库连接池是为了更有效地利用数据库连接的最重要措施.它对于一个 ...

  9. mysql连接池设计_数据库连接池(基于MySQL数据库)

    使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC ...

最新文章

  1. 神在夏至祭降下了神谕(oracle)
  2. 自定义添加删除行按钮
  3. Android Selector的简写
  4. php伪静态后不能访问html,php伪静态后html不能访问怎么办
  5. ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结
  6. 怎么利用linux来操作手机,Linux_在Linux操作系统下操作蓝牙手机的方法,所谓操作,到现在只是通过蓝 - phpStudy...
  7. Python编程学习笔记:列表
  8. 20200712每日一句
  9. 读react.js小书 02
  10. Wind对接pytho总结
  11. 4r照片尺寸是多大_4R照片是什么尺寸,跟普通照片有什么区别? – 手机爱问
  12. 如何在Tomcat中配置二级域名
  13. 多路电源管理芯片(记录)
  14. kettle连接access问题总结
  15. Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
  16. CRM-如何获取客户
  17. 使用XINCheck文档查重软件对本地文档查重
  18. linux文件系统ram,Linux常用文件系统概述-RAM篇
  19. 从0到1:微信小程序自选股项目回忆录
  20. 操作系统进程调度算法——吸烟者问题

热门文章

  1. [js] ajax请求地址只支持http/https吗?能做到让它支持rtmp://等其它自定义协议吗 ?
  2. 工作179:接口对接
  3. 工作51:后端vue学习地址
  4. 前端学习(2215):认识react(2)
  5. 前端学习(168)全局事件属性
  6. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持
  7. java学习(73):GUL网格布局管理器
  8. python 高维数据_用Sci-kit learn和XGBoost进行多类分类:Brainwave数据案例研究
  9. stylus之混合书写(Mixins)
  10. 程序员的数学笔记1--进制转换