.NET数据库连接池

.NET ADO.NET和数据库的连接、 数据库连接池 数据库连接一般都被认为是一个性能成本相对较大的动作,所以针对数据库连接以及读写的优化往往是系统优化的关键点。数据库连接池就是一个非常重要的优化机制。(1)数据库连接池的基本概念数据库连接池,顾名思义就是一个存储数据库连接的缓冲池,由于连接和断开一个数据库的开销很大(想想经典的TCP三次握手和四次挥手),反复连接和断开数据库对于系统的性能影响将会非常严重。 阅读详情

 

  •  如果您通过使用另一个 Execute 方法(例如,ExecuteScalar、ExecuteNonQuery 和 ExecuteXMLReader)执行查询,则您需要负责打开 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 异常。

        现在您必须决定要采取的措施,我不建议您告诉用户您已经用完了所有连接。有些应用程序会通知用户系统正忙于帮助其他客户,并建议用户稍后进行访问。其他应用程序则播放一段动画,通知用户系统尚未死锁,而是正在忙于处理他们的请求。同时,您的代码重新尝试操作。在所有情况下,您应该记录这些故障,以便帮助诊断问题的症结所在,并记录您已经耗尽了资源。

ADO.NET数据库连接池的创建和分配 通过适当地配置连接池属性,我们可以创建一个有效的连接池,并使用连接对象来执行数据库操作。连接池会自动管理连接对象的分配和释放,从而减少连接的创建和销毁开销,提高应用程序的性能和响应速度。需要注意的是,连接对象在关闭时,并不会立即销毁,而是由连接池管理。在后端开发中,ADO.NET提供了连接池功能,可以有效地管理数据库连接,从而提高应用程序的性能和可伸缩性。连接池的创建过程就是这样简单,一旦连接池创建完成,我们可以开始使用连接对象来执行数据库操作。通过关闭连接,连接对象将返回连接池,并可供其他请求重用。 阅读详情

相关推荐

.net数据库连接池配置技巧(默认值)

ado.net 本就有连接功能,所有.net开法基本不用去考虑连接问题,怪不得.net的连接池资料网上找不到。.net连接池只要在连接字符串里配制就可以了

理解.NET中的数据库连接池

理解.NET中的数据库连接池作者 Joydip Kanjilal摘要:       连接池能在程度上提高数据库访问性能。本文讨论到底何为连接池,它如何提高数据库访问性能,以及如何在.NET中创建连接池并增加或移除连接。 导言       连接数据库是应用程序中耗费大量资源且相对较慢的操作,但它们又是至关紧要的。连接池是已打开的及可重用的数据库连接的一个容器。连接池在所有的数据库连接都关闭时才从

Simplicity is more complicated than you think 1700

高精度有源积分器设计:基于罗氏线圈的电流测量方案解析

在电力系统保护、工业自动化及高精度计量领域,电流的非接触式精确测量是核心需求。传统电流互感器存在磁芯饱和、频带受限等局限,难以应对现代电力电子设备产生的复杂波形。罗氏线圈作为一种空心电流传感器,凭借其宽频带、高线性度及无饱和风险的优势,成为理想解决方案。其工作原理基于法拉第电磁感应定律,输出信号与被测电流的导数成正比,因此必须通过积分运算恢复原始电流波形。积分器的精度、稳定性及动态响应直接决定了整个测量系统的性能上限。一个设计精良的有源积分器能有效解决直流漂移、相位误差及噪声放大等挑战,在继电器保护、断路器

weixin_30036289的博客 316

ASP.NET 与数据库知识点(二)连接池

ASP.NET 与数据库知识点(二)连接池

m0_46454966的博客 907

Rokid眼镜高精度图像识别的五大工程破局点

图像识别是AR交互的基础能力,其核心在于将现实图像映射为可计算的数字特征,并通过几何建模解算空间姿态。在专用AR眼镜场景中,该过程面临光学畸变、传感器时序错位、低延迟跟踪与人因适配等复合挑战。尤其在工业现场,Rokid Max系列的鱼眼镜头畸变、IMU-视觉异步采样、窄FOV下快速眼动等物理约束,使传统基于AR Foundation或OpenCV的识别方案失效。本文聚焦真实部署中的关键瓶颈,涵盖实时反畸变纹理渲染、原生SDK直调优化、端侧轻量CNN模型(TinyImageNet-Rokid)、IMU-视觉紧

weixin_33681778的博客 697

告别QXDM:在Android Studio中调试与验证高通NV读写功能的完整流程

本文详细介绍了在Android Studio中调试与验证高通NV分区读写功能的完整流程,替代传统的QXDM工具。通过JNI接口层、HAL服务层和Diag通信层的架构设计,开发者可以在熟悉的IDE环境中高效完成NV操作,包括环境配置、错误处理和性能优化等关键实践。

weixin_27013291的博客 261

学习ADO.NET技术(六)—数据库连接池

连接池在部署多用户程序时,显得非常重要。今天主要学习连接池的基本原理;如何利用连接池来提高应用程序的性能。 目录 目录 1、什么是连接池 2、连接池的工作原理 2.1创建连接池 2.2分配空闲连接 2.3移除无效连接 2.4回收使用完的连接 3、连接池的几个重要属性 3.1连接池属性实例 1、什么是连接池 前面学习数据库连接的时候我们了解到,数据库连接至关重要...

u014677855的博客 3414

用Python玩转共现分析:从NLTK到热力图可视化(附完整代码)

本文详细介绍了如何使用Python进行文本共现分析,从NLTK基础文本处理到构建共现矩阵,并实现热力图可视化。通过完整的代码示例,帮助数据分析师和开发者掌握这一揭示词语间关联网络的实用NLP技术,快速从文本中提取语义关系和主题结构。

weixin_29313817的博客 350

OLE DB、ODBC 和 Oracle 连接池 (ADO.NET)

<br /><br />池连接可以显著提高应用程序的性能和可缩放性。本节介绍用于 OLE DB、ODBC 和 Oracle 的 .NET Framework 数据提供程序的连接池。OleDb 连接池<br />OLE DB .NET Framework 数据提供程序使用 OLE DB 会话池自动管理连接池。连接字符串参数可用于启用或禁用包括池在内的 OLE DB 服务。例如,以下连接字符串禁用 OLE DB 会话池和自动事务登记。复制Provider=SQLOLEDB;OLE DB Services=-4;

457

解决屏幕不亮难题:慷智SerDes DE信号极性配置避坑指南

本文深入探讨了基于慷智AIM95x系列SerDes芯片的嵌入式显示系统开发中,因DE信号极性配置不匹配导致屏幕不亮的典型故障。文章详细解析了DE信号的核心作用与极性定义,提供了慷智SerDes芯片中DE极性寄存器的具体配置方法与调试记录,并给出了从隔离问题、对比时序到波形验证的系统性排查流程,帮助工程师快速定位并解决此类隐蔽问题。

weixin_29185493的博客 142

WPT无线电能传输公式推导、编程计算、仿真验证全过程

主要分为5大模块,分别为无补偿,SS,SP,PP,PS,每个模块对应有公式推导,matlab编程计算相关参数以及将计算参数和仿真验证观察是否对应。采用matlab编程计算参数以及simulink仿真验证

zzhao2580的博客 7758

ADO.NET数据库连接池的性能测试——出色的DB Pool

1、问题 前几天项目中遇到一个性能问题:一个有近200个子单据的单据,提交时会非常慢,甚至会出现超出最大进程数这样的错误。查看代码,发觉对每个子单据都启动了流程,都要单独获取session与DB交互。查看DB中的session连接数,发觉每提交单据,session都会多达250+... 2、想法 当时第一感觉就是认为问题应该是在这里,就有了这样的想法:改变每个单据都占用se...

diaosoudi0255的博客 119

MCGS触摸屏Modbus TCP通讯实战:从寄存器写入到字符串处理的完整代码解析

本文详细解析了MCGS触摸屏通过Modbus TCP协议实现寄存器写入和字符串处理的完整代码,涵盖单寄存器写入、多寄存器写入及字符串传输等核心技术。文章还提供了MCGS组态环境中的实战配置步骤和常见问题排查方法,帮助开发者快速掌握工业自动化通讯的关键技术。

study的专栏 758

asp.net mysql 连接池_asp.net 使用数据库连接池

数据库连接数过万的真相,原来我们错怪阿里云RDS了在一次数据库连接问题中,我们坚持认为数据库连接数过万是阿里云RDS的问题,但后来阿里云提供了当时的数据库连接情况,让我们动摇了自己的想法。上面这5个帐户产生了10030个数据库连接,当看前4个帐户(产生了9511个连接)的名称时,我们打了一个寒颤 —— 这些都是运行 Linux 上的 AS...文章yq传送门2017-04-0710571浏览量AS...

weixin_42515063的博客 970

全国30米分辨率逐年植被覆盖度(FVC)数据集

植被覆盖度是描述地表植被的重要参数与生态环境的基本指标,在大气圈、土壤圈、水圈和生物圈中都占据着重要的地位,区域及全球范围的植被覆盖度估算对植被及相关领域的研究具有重要意义。往往参照《土壤侵蚀分类分级标准》,将植被覆盖度划分为4个等级:<30%为低覆盖度、30%—45%为中低覆盖度、45%—60%为中覆盖度、>60%为高覆盖度。本数据集包括1986至2022年间,全国植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。NDVImax 和NDVImin分别为区域内最大和最小的NDVI值。

地球资源数据云的官方博客 1966

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

你认为的.NET数据库连接池,真的是全部吗?

一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接被收拢到配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是开箱即用的。DBA能在对业务方无侵入的情况下,让大规模微服务实例切换数据库连接,之后DBA要求, 那么问题来了: **dotnet程序怎么清空数据库连接?

qq_30236895的博客 1008

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

.net 数据库连接池

需要在.NET下实现数据库连接池,非常简单,只要确保你每一次的连接使用相同的连接字符串(和连接池相同)就行了;记住只有连接字符串相同时连接池才会工作,如果连接字符串不相同,应用程序就不会使用连接池而是创建一个新的连接。如下: Server=(local); Integrated Security=SSPI; Database=Northwind; Max Pool Size=75; Min Po

sunyuyong521的专栏 576

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

asp.net mysql 连接池_ASP.NET数据库连接池设置浅析

对于ASP.NET数据库连接池可以使用一组名称-值对以链接字符串的形式配置链接池。例如,可以配置池是否有效(默认是有效的),池的***、最小容量,用于打开链接的排队请求被阻断的时间。下面的示例字符串配置了池的***和最小容量。"Server=(local); Integrated Security=SSPI; Database=Northwind;Max Pool Size=75; Min Poo...

weixin_28811007的博客 311

ASP.NET数据库连接池设置浅析以及连接池创建和分配

对于ASP.NET数据库连接池可以使用一组名称-值对以链接字符串的形式配置链接池。例如,可以配置池是否有效(默认是有效的),池的最大、最小容量,用于打开链接的排队请求被阻断的时间。下面的示例字符串配置了池的最大和最小容量。 "Server=(local); Integrated Security=SSPI; Database=Northwind; Max Pool Size=75; Mi

Robin022的专栏 2723

怎么清空.NET数据库连接池

目录一、连接池知识背景二、清空.NET连接池 一、连接池知识背景 在我们的程序中连接数据库是一种耗时的行为,.NET为了降低打开连接的成本,在ado.net中使用了一种叫做连接池的优化技术。使用数据库连接池可以减少打开新连接的次数,并且将物理数据库的连接交给了池程序去做。 池程序是通过为每个特定的连接配置保持一组活动的连接对象来管理数据库连接的。每当应用程序发起连接数据库的请求时,池程序就会在连接池中查找是否存在可用的连接,如果有则返回给调用者。当应用程序关闭连接对象时,池程序将连接对象返回到池中, 这个连

喵叔 1498

asp.net mysql 连接池_asp.net 数据库连接池浅析

1,对于ASP.NET数据库连接池可以使用一组名称-值对以链接字符串的形式配置链接池。例如,可以配置池是否有效(默认是有效的),池的最大、最小容量,用于打开链接的排队请求被阻断的时间。下面的示例字符串配置了池的最大和最小容量。"Server=(local); Integrated Security=SSPI; Database=Northwind;Max Pool Size=75; Min Poo...

weixin_42498909的博客 263

.Net与Oracle的数据库连接池

时间: 2006-06-15  来自:优快云<!--google_ad_client = "pub-0103898066674568";google_ad_width = 728;google_ad_height = 90;google_ad_format = "728x90_as";google_ad_type

daxia666的专栏 1096

13、.NET 数据库连接池概述及代码示例

数据库连接池(Connection Pool)是一种关键的数据库连接管理技术,它允许应用程序重复使用一个现有的数据库连接,而不是每次都重新建立一个新连接。这项技术能明显提高数据库操作的性能,尤其在多用户的网页应用程序中体现得尤为突出。

qq_27678663的博客 746

使.NET使用数据库连接池

****************连接池代码*************************** /** * 实现连接池 *  */using System;using System.Collections;using System.Timers;namespace XuLongClass{ ///  /// ObjectPool 的摘要说明。 ///  public abstra

软若石(I Will Get What I Want.)Asp.Net,Ajax,C#,Javascript 2177
上一篇: 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题题
下一篇: SQL Server .NET Framework 数据提供程序连接池
tftutu
博客等级 码龄15年 4粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值