前一阵开发一套系统,同组的同事提供了一个数据库连接组件,是他自己封装的,使用了自定义的连接池,用着很是不爽,而且经常会因为程序不严谨的原因,导致连接池里的连接被用完,也导致其他错误,因此我想自己研究一下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 里,不需要自己实现连接池,只要设置好参数就可以了。

最新文章

  1. spring+IOC+DI+AOP优点分析(一)
  2. 【hadoop】——压缩工具比较
  3. C#开发命名规范
  4. ajax:post 400错误
  5. 怎么在手机浏览器上访问电脑本地的文件,局域网内,自建WiFi也可以
  6. GXPT(一)——UI设计
  7. ssh连接慢
  8. C#实现目录复制
  9. Bank Interest
  10. 配置java项目的intellij idea的运行环境
  11. Android 百分比布局库(percent-support-lib) 解析与扩展
  12. Java实现单例模式的9种方法
  13. h5微信页面在手机微信端和微信web开发者工具中都能正常显示,但是在pc端微信浏览器上打不开(显示空白)
  14. ajax接口和后台交互
  15. 【转】浮点数与IEEE 754
  16. zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务
  17. 一个整型数组里除了一个数字之外,其他的数字都出现了两次。要求时间复杂度是O(n),空间复杂度是O(1),如何找出数组中只出现一次的数字
  18. 对象new和不new的理解
  19. Taking water into exams could boost grades 考试带瓶水可以提高成绩?
  20. java的break跳出多层循环

热门文章

  1. python安装、模块安装
  2. web前端基础知识-(七)Django进阶
  3. yii2 可逆加密
  4. 【09-27】Spring 学习笔记
  5. 一道Apple公司(中国)的面试题目
  6. Linux平台开发指南
  7. C程序汇编运行模式简析
  8. Hibernate之lazy延迟加载
  9. Android中矢量动画
  10. 我的LaTeX中文文档模板