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. 服务器能访问共享,但是ping不通解决方案

    今天发现客户反映后台连不上数据库,远程程查看之后发现机器可以访问服务器共享,但是ping网络的时候ping不通.Ip设置也没问题,网络也都连上了,而且客户反映他们那其它机器都能连上. 百度了一下,发现 ...

  2. Android测试环境搭建(win7)

    一.安装JDK并配置环境变量 1.在Java官方网站上下载相应系统的jdk文件安装,如win7 64 位系统下安装jdk-6u45-windows-x64,全部选择默认的安装路径即可安装完成. 2.配 ...

  3. mysql将字符转换成数字

    在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现例如:将pony表 ...

  4. IIS不定期Crash和Oracle“未处理的内部错误(-2)”的问题分析

    问题描述:系统不定期报出Oracle“未处理的内部错误(-2)”,严重时IIS会Crash 典型异常日志如下: Exception type:   System.AccessViolationExce ...

  5. [tomcat] tomcat+nginx 负载均衡配置

    首先下载,安装tomcat. 修改tomcat端口,修改server.xml: 1.修改tomcat端口(默认8080) <Connector port="8383" pro ...

  6. mysql中的null字段值的处理及大小写问题

    在MySQL中,NULL字段的处理,需要注意,当在处理查询条件中有NULL,很有可能你得到的值不是想要的,因为,在MySQL中,判断NULL值相等(=)或者不等(!=)都会返回false.主要出现在常 ...

  7. Ruby Class

    类定义: class 类名 类定义 end ※类名大写字母开始!!! 构造方法(initialize) 类名调用new方法的时候,触发的一个方法. def initialize(my_name = & ...

  8. PHPNow升级PHP版本为5.3.5的方法

    在WIN上有时候需要测试一些PHP程序,又不会自行独立配置环境,那么PHPNow是非常好的选择,这篇文章主要为大家分享下如果将phpnow的php版本升级为5.3.5   在WIN上有时候需要测试一些 ...

  9. android学习笔记三

    GUI==>Graphics User Interface,图形用户界面. android UI 建立在View.ViewGroup基础上,采用组合器设计模式设计View和ViewGoup. V ...

  10. 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页

    如下图,在oracle官网下载了一个JAVA的API文档,双击index.html时打开是浏览器的首页,不知道为什么?请问怎样才能以chm文档格式显示?