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

摘录自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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:在csv中维护变量参数

问题: 1、我的变量表多,通过之前的csv获取的方式,或者用户变量来维护,比较麻烦 2、我想在脚本之外维护我的变量数据,脱离脚本 解决方案: 1、csv的配置如图,队列是变量名称,第二列是变…

前端学习(2471):vue-echarts和echarts的区别:

vue-echarts和echarts的区别: vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1 开发,依赖 Vue.js v2.2.6,功能一样的只是把它封装成vue插件 这样更方便以vue的方式去使用它。echarts就是普通的js库, vue-echarts特…

python 零代码快速开发平台_现在低代码开发平台和零代码平台区别是什么?

低代码与零代码,可参考一下开发平台在国内已经发展了很久了,从有代码到低代码,甚至有些厂家声称可以无代码,当然无代码只是一个噱头。低代码开发可以解决传统的开发方式的复杂方式,提高开发效率,节省时间成…

JSON.parse()、eval()和JSON.stringify()

1.什么是JSON? JSON全称是JavaScript Object Notation,是一种轻量级的数据交换格式。JSON 与XML具有相同的特性,是一种数据存储格式,但是JSON相比XML 更易于人编写和阅读,更易于生成和解析。 2.json对象和json字符串 json对象可以…

rust edition python3_PyO3首页、文档和下载 - Python 解释器的 Rust 绑定

PyO3 是 Python 的 Rust 绑定,可以用 Rust 语言对 Python 加速。这包括用 Rust 语言运行 Python 代码并与之交互,以及直接编写原生 Python 模块。PyO3 一开始只是作为 rust-cpython 的分支出现, 后来由于 rust-cpython 缺乏维护, PyO3 开始在 Rust 社区流…

solr 配置中文分词器

ik转载于:https://www.cnblogs.com/javabigdata/p/7127639.html

前端学习(2474):页面布局

request.js <template> <div class"artical-container"><!--卡片--><el-card class"filter-card"><div slot"header" class"clearfix"><!--面包屑导航--><el-breadcrumb separator-class&quo…

https证书/即SSL数字证书申请途径和流程

国际CA机构GlobalSign中国 数字证书颁发中心网站&#xff1a;http://cn.globalsign.com      https证书即SSL数字证书&#xff0c;是广泛用 于网站通讯加密传输的解决方案&#xff0c;是提供通信保密的安全性协议&#xff0c;现已成为用来鉴别网站的真实身份&#xff0c;以…

linuxsed替换字符串后保存_Numpy运用-文件读写、存储及字符串处理

问题列举&#xff1a;Numpy文件读取Numpy文件存储Numpy字符串操作1、文件读取可以使用genfromtxt读取txt或者csv文件可以使用loadtxt读取txt或者csv文件两个函数功能类似&#xff0c;genfromtxt针对的更多是结构化数据注&#xff1a;delimiter表示的是以&#xff0c;分隔数据&a…

【转载记录】Accessing Device Drivers from C#

来源&#xff1a;http://www.drdobbs.com/cpp/accessing-device-drivers-from-c/184416423/Device Drivers are written largely in C or C. No explicit support for Device Driver communication is included in the current .NET framework. David implements support with …

mysql5.1win7_免安装版mysql5.1.57在win7下成功配置

mysql下载回来之后解压到D:/mysql-5.1.57-win32&#xff0c;把D:/mysql-5.1.57-win32/bin加入到系统环境变量Path中。然后需要简单的配置mysql数据库&#xff0c;把my-small.ini改名为my.ini(其他的几个文件也可以直接拿过来修改一下名字)&#xff0c;编辑文件my.ini&#xff0…

前端学习(2476):表单数据绑定处理

request.js <template> <div class"artical-container"><!--卡片--><el-card class"filter-card"><div slot"header" class"clearfix"><!--面包屑导航--><el-breadcrumb separator-class&quo…

mysql列连接_连接来自MySQL中不同表的列

您可以使用CONCAT()。让我们首先创建一个表-mysql> create table DemoTable1-> (-> FirstName varchar(20)-> );使用插入命令在表中插入一些记录-mysql> insert into DemoTable1 values(Chris);mysql> insert into DemoTable1 values(David);使用select语句显…

sizeof小览

sizeof小览 一、文章来由—一道面试题迁出的探究 我发现我已经形成一种习惯写来由了&#xff0c;以后看博客的时候能够让我回顾起为什么出现这个问题&#xff0c;我用什么方法解决的&#xff0c;既然形成习惯就让这个习惯保持下去吧。今天实验室师姐在看书&#xff0c;一处不解…

前端学习(2477):封装数据接口

request.js <template> <div class"artical-container"><!--卡片--><el-card class"filter-card"><div slot"header" class"clearfix"><!--面包屑导航--><el-breadcrumb separator-class&quo…

python读取一行数组_python 把文件中的每一行以数组的元素放入数组中的方法

有时候需要把文件中的数据放入到数组中&#xff0c;这里提供了一种方法&#xff0c;可以根据文件结尾的标记进行数据拆分&#xff0c;然后再把拆分的文件放入数组中# -*-coding: utf-8 -*-f open("username.txt","w")f.write("Lycoridiata\n")f…

前端学习(2478):请求提交

request.js <template> <div class"artical-container"><!--卡片--><el-card class"filter-card"><div slot"header" class"clearfix"><!--面包屑导航--><el-breadcrumb separator-class&quo…