C# ADO.net 数据库连接池
前一阵开发一套系统,同组的同事提供了一个数据库连接组件,是他自己封装的,使用了自定义的连接池,用着很是不爽,而且经常会因为程序不严谨的原因,导致连接池里的连接被用完,也导致其他错误,因此我想自己研究一下ado.net 的连接池。
其实很早以前,我就接触过连接池,只是从来没有实际使用过,在我的印象里,一个连接池应该是跟SqlConnection,MySqlConnection等差不多,都是实现了IDBConnection 接口,这样程序在使用的时候,是没有任何代码入侵,只是在new 一个connection 的时候,从连接池中获取,同事的这个连接池实在不符合我的审美。
但是当我从网上开始搜资料时,却发现,其实 Ado.net底层已经支持连接池,根本不需要我们自己开发!!!
在Ado.net 中,连接池的行为可以通过连接字符串来控制,主要包括四个重要的属性:
- Connection Timeout:连接请求等待超时时间。默认为15秒,单位为秒。
- Max Pool Size: 连接池中最大连接数。默认为100。
- Min Pool Size: 连接池中最小连接数。默认为0。
- Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
我发现了下面这篇文章:
http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html
另外,因为我们用了Mysql 数据库,类库不是微软提供的,所以我担心mysql 没有实现连接池,所以自己测试了一下,结果很明显,mysql 也同样支持。
附测试代码和结果:
class Program
{
static void Main(string[] args)
{
MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString); DateTime startTime = DateTime.Now;
Console.WriteLine(startTime.ToLongTimeString()); for (int i = ; i < ; i++)
{
conn.Open();
conn.Close();
} DateTime endTime = DateTime.Now;
Console.WriteLine(endTime.ToLongTimeString());
Console.WriteLine("连接100次,使用时间(ms):"+(endTime-startTime).ToString()); Console.ReadLine();
}
}
配置文件:
启用连接池:(默认的)
<add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=true;"/>
不启用连接池:
<add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=false;"/>
每种配置我都运行了三遍:
使用连接池的时候,执行100次时间为0.477秒
不使用连接池的时候,时间是6.56 秒,相差极大。
总之,在Ado.net 里,不需要自己实现连接池,只要设置好参数就可以了。
C# ADO.net 数据库连接池的更多相关文章
- 必须知道的ADO.NET 数据库连接池
http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html 题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没 ...
- ADO.NET中SQL Server数据库连接池
连接到数据库服务器通常由几个需要很长时间的步骤组成. 必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前 ...
- ADO.NET入门教程(五) 细说数据库连接池
摘要 今天我要讲的是数据库连接池.说实话,我表示鸭梨很大.因为相比其他章节来说,连接池相对来说难理解一点.我要用最通俗的语句给大家讲明白,讲透彻却也不是一件很容易的事.但是,连接池又是非常重要的知识点 ...
- 从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
- 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
- paip.提升性能----数据库连接池以及线程池以及对象池
paip.提升性能----数据库连接池以及线程池以及对象池 目录:数据库连接池c3po,线程池ExecutorService:Jakartacommons-pool对象池 作者Attilax 艾龙, ...
- 使用c#数据库连接池
摘自: http://www.wxphp.com/wxd_0fetn2bw2548fsc2ak8h_1.html 导读:使用C#数据库连接池,连接到数据库服务器通常由几个需要软长时间的步骤组成,必须与 ...
- asp.net如何设置数据库连接池的数量
http://www.cnblogs.com/wbcms/archive/2008/10/11/1308725.html 可以使用一组名称-值对以链接字符串的形式配置链接池.例如,可以配置池是否有效( ...
- unigui数据库连接池
UNIGUI for delphi,是一款WEB RIA开发框架.开发WEB程式如传统C/S般简单,众多DELPHIER趋之若鹜. 虽然上手非常容易,但要真正使用好,有些地方还是值得考究的. 网上有同 ...
随机推荐
- easyUI和bootstrap的混搭
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Java之使用Hadoop探索大数据的世界
什么是大数据 PB = 1024tb 7123913827189tb Reids 无共享 HDFS 优点 :特别适合存储大型文件 TFS hdfs 架构 NameNode: 整个hadoop总管,只有 ...
- path操作
1. 通过当前目录获取想要的目录,采用relative函数,例如: function test(){ var xx= path.relative('/', '../../'); console.log ...
- 行列转置(Oracle)
一.Oracle行列转置 1.行转列 (1)创建表格.插入测试数据 create table student( id number, name ), course ), score number ) ...
- Maven Super POM
Maven super POM defines some properties. Three ways to find it ${M2_HOME}/lib/maven-model-builder-3. ...
- java基础 常用组件
几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...
- VMware中解决ubuntu不能连接网络问题。(亲测有效)
1.保证自己的电脑能正常连接网络 2.打开关于VMware的所有服务(一般情况服务设置的是手动启动,需要自己打开)如图: 3.对VMware虚拟机进行网络设置:右击ubuntn选择设置 4.选择网络适 ...
- HTML DOM 之<textare>标签
对于DOM元素节点textarea的value值,下面举例说一下. 1. <textarea><textarea> 2.<textarea> <textare ...
- BZOJ 2083: [Poi2010]Intelligence test
Description 问一个序列是不是起始序列的子序列. Sol 二分. 直接维护每个数出现的位置,二分一个最小的就行. Code /******************************** ...
- python之路二十
一, $.ajax,这个是JQuery对ajax封装的最基础步,通过使用这个函数可以完成异步通讯的所有功能.也就是说什么情况下我们都可以通过此方法进行异步刷新的操作.但是它的参数较多,有的时候可能会麻 ...