.NET连接池的配置 【转】
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连接池的配置 【转】的更多相关文章
- C3P0连接池详细配置
C3P0连接池详细配置 转自http://msq.javaeye.com/blog/60387 <c3p0-config> <default-config> <!--当连 ...
- 配置数据库连接池,Tomcat6.0 连接池的配置
Tomcat6.0 连接池的配置1.本人当前使用的Tomcat版本为:6.0.20,oracle为稳定的9i版本 2.下文为方便起见,依习惯以%Tomcat_Home%表示Tomcat安装的目录,本人 ...
- spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理
在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...
- springboot添加多数据源连接池并配置Mybatis
springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 ...
- Hibernate的配置中,c3p0连接池相关配置
一.配置c3p0 1.导入 hibernate-c3po连接池包,Maven地址是:http://mvnrepository.com/artifact/org.hibernate/hibernate- ...
- Druid连接池默认配置和坑
一.公司默认配置 ds_0: !!com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver url: ...
- eclipse下jdbc数据源与连接池的配置及功能简介
今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急 ...
- SSM项目下Druid连接池的配置及数据源监控的使用
一,连接池的配置 在pom.xml中添加,druid的maven信息 <dependency> <groupId>com.alibaba</groupId> < ...
- 六:SpringBoot-集成Druid连接池,配置监控界面
SpringBoot-集成Druid连接池,配置监控界面 1.Druid连接池 1.1 Druid特点 2.SpringBoot整合Druid 2.1 引入核心依赖 2.2 数据源配置文件 2.3 核 ...
- Mybatis数据连接池的配置---增删改查(以及遇见的问题)
1.首先创建项目和各个文件,如图所示: 2.配置相关数据库连接 在jdbc.properties中加入 1 db.driver=com.mysql.jdbc.Driver 2 db.url=jdbc: ...
随机推荐
- Linux-实用的工具
1.Nethogs-查看进程占用带宽情况wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # ...
- java中的包装类与装箱拆箱定义
JAVA 中int类型转String类型的通常方法,有三种: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i+"" ...
- C语言常用的小代码
圆周率Pi tan(Pi/4)=1 => Pi=4*arctan(1) 反正切函数arctan()在C语言里表示为atan(),为保证精度取圆周率的代码如下: const double Pi = ...
- C# Color Table颜色对照表
.AliceBlue 240,248,255 .LightSalmon 255,160,122 .AntiqueWhite 250,235,215 .LightSeaGreen 32,178,170 ...
- 【linux】 /etc/shadow 文件
格式:username: passwd: lastchg: min: max: warn: inactive: expire: flag 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔 ...
- HackerRank "Minimum Average Waiting Time" !
Something to learn: http://blog.csdn.net/yuwenshi/article/details/36666453 Shortest Job First Algori ...
- 剑指offer系列47---翻转单词顺序
[题目]输入“I am a student.”>>>“.tneduts a ma I”.>>输出:student. a am I package com.exe9.off ...
- thinkphp 常用
{$Think.session.adminuser} 获取session信息,模版和js中都可以调用 模版调用 <empty name="Think.session.userid& ...
- android下asynchttp库对于session的支持
默认asynchttp库不支持session,需要用户配置下cookie来处理,直接贴支持session的代码 package example.com.sessiontest; import andr ...
- 128. Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...