ADO.Net 在数据库操作过程中默认打开了连接池,不需要再进行手工配置。这个特性可以使数据库操作时效率提高,但也要有相应的代码配合,才能真正提高程序效率。

1、连接字符串

ADO.Net 中的连接池大小可以通过数据库连接字符串来控制,例如:

string cs =

"server=.;uid=sa;pwd=tcaccp;database=pubs;pooling=true;min pool size=5;max pool size=10"

其中 pooling 表示是否打开连接池,默认为打开,关掉时需要 pooling = false;

min pool size 表示连接池最少保存几个连接对象;

max pool size 表示连接池最多保存几个连接对象。(最大值不能为 0,也不能小于最小值)

配置好以后,通过 SqlConnection con = new SqlConnection(cs); 即可得到一个属于连接池的连接对象。

但一定要注意,连接字符串的任何改动,系统都会认为是另一个完全不同的数据库连接,将会创建新的连接池,这必然会造成更大的系统开销。所以,为了保证某些连接对象属于一个连接池,连接字符串不能有任何变化,包括大小写,包括空格,都不能有任何变化。

2、程序中的改动

普通的数据库操作:

SqlConnection con = new SqlConnection(cs);

try

{

con.Open();

//进行各种数据库操作

}

catch(Exception ex){ Console.WriteLine(ex.Message); }

finally

{

con.Close();

con.Dispose();

}

这个过程很繁琐,每次都要在操作完毕后保证连接对象的关闭和资源释放。在打开连接池特性以后,finally 中的内容,其实是将连接对象的状态置为关闭,然后放回到连接池中。既然系统知道要放回连接池,那有没有什么更好的方法呢?

using(SqlConnection con = new SqlConnection(cs))

{

try

{

con.Open();

// Do Something......

}

catch(Exception ex){ Console.WriteLine(ex.Message); }
    }

.Net 中的 using 语句,不光能导入命名空间,还能在程序体内,局部使用某个对象。像上边代码,con
的作用域只有 using 对应的大括弧这么大。更神奇的是,using 可以在对象作用域结束时,自动调用
con.Dispose()将对象释放,所以以上代码中,没有 con.Close() 和 con.Dispose(),同样可以释放资源,放回连接池,省了
finally 和手工关闭的麻烦。但同时需要注意,using 既然是在结束作用域时是自动调用对象的 Dispose()方法,那就是说不是什么类型的对象都可以用
using 的方式自动释放,必须要实现 IDispose 接口。

3、监控连接池的状态

连接池在工作状态下,是完全由系统来进行控制的,那如何监控连接池中连接对象的信息呢?

从两方面入手:数据库服务器 和 数据库驱动程序。

数据库服务器是连接对象的目的地,通过服务器状态的查询,就能够看到连接池对服务器的访问信息。拿 SQL Server
2005 为例,执行 sp_who 或者 sp_who2 两个系统存储过程,就可以看到所有访问数据库的连接的列表。比如 min pool size 设置为
5,表示连接池中至少要维护 5 个数据库对象,程序启动以后,执行 exec sp_who2 就可以发现,数据库中有 5
个对应数据库名的连接,如果没有操作,其状态就会处于 sleeping 状态。

另一方面,程序的数据库操作都需要有数据库驱动程序,既然 ADO.Net
中能够自动管理连接池,那驱动程序肯定起着相当重要的作用。对驱动程序进行监控,靠得是 Windows 系统中的“性能计数器”功能。

在我的电脑(右键)-->管理-->系统工具-->性能日志和警报-->计数器日志上点击右键,新建日志设置,随便起名
abc,出现设置对话框,“添加对象”,下拉列表中选 “.NET Data Provider for SqlServer”,添加,关闭。

下边是数据采样间隔,比如 1
秒采集一次。切换到“日志文件”选项卡,将日志文件类型设置为“文本文件(逗号分隔)”,日志就会默认记录在“C:\PerfLogs\abc_000001.csv”里,点确定关闭窗体。

回到“计数器日志”窗口,保证刚刚设置的 abc 处于绿色运行状态,如果是红色,可以点中 abc
,然后在工具栏中点播放按钮(黑色的三角)让其启动。

设置好后,就可以让程序运行,其数据库连接池状态,连接对象数量,就会在“C:\PerfLogs\abc_000001.csv”里记录,需要查看时直接双击,用
Excel 打开即可。打开的文件,左侧是记录时间,上方有我们关心的:

NumberOfPooledConnections :放入池中的连接对象数

NumberOfActiveConnectionPoolGroups :活动的连接池组的数量

NumberOfInactiveConnectionPoolGroups :不活动的连接池组的数量

NumberOfActiveConnectionPools :活动的连接池数量

NumberOfInactiveConnectionPools :不活动的连接池数量

根据这些日志数据,我们就可以在程序运行时监控连接池状态,并根据这些数据,来调整连接池的相关设置。

原文地址:http://www.cnblogs.com/jxnclyk/archive/2010/04/27/1722007.html

.NET连接池的配置 【转】的更多相关文章

  1. C3P0连接池详细配置

    C3P0连接池详细配置 转自http://msq.javaeye.com/blog/60387 <c3p0-config> <default-config> <!--当连 ...

  2. 配置数据库连接池,Tomcat6.0 连接池的配置

    Tomcat6.0 连接池的配置1.本人当前使用的Tomcat版本为:6.0.20,oracle为稳定的9i版本 2.下文为方便起见,依习惯以%Tomcat_Home%表示Tomcat安装的目录,本人 ...

  3. spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

    在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...

  4. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

  5. Hibernate的配置中,c3p0连接池相关配置

    一.配置c3p0 1.导入 hibernate-c3po连接池包,Maven地址是:http://mvnrepository.com/artifact/org.hibernate/hibernate- ...

  6. Druid连接池默认配置和坑

    一.公司默认配置 ds_0: !!com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver url: ...

  7. eclipse下jdbc数据源与连接池的配置及功能简介

    今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急 ...

  8. SSM项目下Druid连接池的配置及数据源监控的使用

    一,连接池的配置 在pom.xml中添加,druid的maven信息 <dependency> <groupId>com.alibaba</groupId> < ...

  9. 六:SpringBoot-集成Druid连接池,配置监控界面

    SpringBoot-集成Druid连接池,配置监控界面 1.Druid连接池 1.1 Druid特点 2.SpringBoot整合Druid 2.1 引入核心依赖 2.2 数据源配置文件 2.3 核 ...

  10. Mybatis数据连接池的配置---增删改查(以及遇见的问题)

    1.首先创建项目和各个文件,如图所示: 2.配置相关数据库连接 在jdbc.properties中加入 1 db.driver=com.mysql.jdbc.Driver 2 db.url=jdbc: ...

随机推荐

  1. memcache 启动参数

    启动方式: 参数 说明 -d 以守护程序(daemon)方式运行 -u root 指定用户,如果当前为 root ,需要使用此参数指定用户 -P /tmp/a.pid 保存PID到指定文件 内存设置: ...

  2. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

  3. The connection to adb is down, and a severe error has occured.

    启动android模拟器时.有时会报The connection to adb is down, and a severe error has occured.的错误.在网友说在任务管理器上把所有ad ...

  4. 剑指offer系列38----滑动窗口的最大值(不懂????????????????????????????????????????????????)

    [题目] 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6 ...

  5. js获取网页的各种高度和宽度

    document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.document ...

  6. 折腾Ipython

    1. 用easy_install安装吧 [root@host python]# easy_install IPython Searching for IPython Reading https://p ...

  7. usaco 2010年3月银组题解

    usaco银组解题报告 一.石子游戏如果把‘O’当作0,‘X’当做1,则N个洞的每一种状态都可以看做是一个N位二进制数.于是,这个问题就变成了求环绕的N位格雷码.幸运的是,这个结构很容易就能够用一个简 ...

  8. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  9. powerdesigner12.5 设置表字符集和存储引擎

    powerdesigner12.5在做建模的时候发现没有找到哪儿设置表的字符集和存储引擎.于是研究了一番. 在菜单上方选择 Database => Edit Current DBMS   然后选 ...

  10. Java heap dump触发和分析(转)

    为了分析java应用的内存泄漏,使用thread dump往往解决不了问题.使用jstat[eg:jstat-gcutil pid 1000 5]工具查看运行的java应用的heap size,per ...