浅谈如何更好的打开和关闭ADO.NET连接池
MS提倡我们尽可能每次的在连接使用完成后就关闭;这样导致每次都要进行打开和关闭操作或用using(){…}写起代码比较麻烦,还有经常对池的操作似乎也带来一些性能上的问题;在Asp.net里一个WebForm经常涉及有N个数据库操作,为了方便直接在init里打开一个连接,然后在Dispose里关闭即省事又能减少对池的操作提高性能;那到底这样做能不能提高性能呢?答案是能,但有些情况估计会很让你感觉到失望…。当池的连接数能应付用户请求的时候,的确是可以减少池的操作带来性能的提升;反之就不一样了用户必须等待到获取连接后才能进行其他操作,当有更多用户在等待获取连接的时候只能让线程处于更长等待时间导致服务总体处理能力下降。
以下做一次简单的测试:
测试方式是使用VS2008自带的负载测试,测试用户数是200,数据库连接池数设置20,测度时长10分钟。
关闭ADO.NET连接池测试代码1:
protected void Page_Load(object sender, EventArgs e)
{
using (System.Data.SqlClient.SqlConnection sqlconn= new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
System.Threading.Thread.Sleep(300);
}
}
关闭ADO.NET连接池测试代码2:
protected void Page_Load(object sender, EventArgs e)
{
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(100);
}
关闭ADO.NET连接池测试结果1
<!--[if !vml]-->
498)this.style.width=498;" height=582>
<!--[endif]-->
关闭ADO.NET连接池测试结果2
<!--[if !vml]-->
498)this.style.width=498;" height=584>
<!--[endif]-->
从以上测试结果来看显然是MS所提倡的方式在某些情况是更好的,因为随着并发用户的提高,即用即断的方式总体上表现效果更佳。还有一点非常重要就是第一种代码方式会启用了池的最大数据库连接数,而第二种代码方式只使用了6个数据库连接;这一点进一步说明了,即用即断在某种情况下更节省数据库连接资源。
虽然结果这样但不代表是什么情况都使用即用即断好,当池不会让用户在门外等的情况是不需要用的,当N个数据库操作间没其他特别耗时的运算最好就用一个连接(对于这个耗时多长就根据你实际情况作出权衡了),对于什么情况应该怎样做其实通过测试就能找到答案。不过我个人推荐还是用MS提倡的:),本人一向都是采用这种方式。
浅谈如何更好的打开和关闭ADO.NET连接池相关推荐
- linux 多线程并行计算,浅谈.NET下的多线程和并行计算(五)线程池基础上
池(Pool)是一个很常见的提高性能的方式.比如线程池连接池等,之所以有这些池是因为线程和数据库连接的创建和关闭是一种比较昂贵的行为.对于这种昂贵的资源我们往往会考虑在一个池容器中放置一些资源,在用的 ...
- 怎样做网络推广浅谈如何更高效的提升关键词排名?你还不知道?
众所周知,网站的关键词排名越高,也就意味着网站建设的越成功,越能吸引用户,并不断的夯实网站的基础.但在怎样做网络推广的实际的优化中,网站关键词排名也是很不容易的竞争上去,那么,在网站优化中,有什么技巧 ...
- 为什么别人总是把你往“坏处想”?浅谈如何更好地与项目团队中的“网友”更好地交流
随着全球化进程的加快,企业的业务不再局限于当地.面对着市场的全面推广,很多公司的业务也遍地开花,尤其是政企行业,客户更是分散在天南海北.为了项目的顺利交付,对于很多公司来说,虚拟团队便成了最好的选择. ...
- 如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题
注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...
- 优化Privoxy的打开和关闭
简介:本文介绍privoxy在mac上一种更方便的打开和关闭方式. 前文介绍了privoxy的安装,使用以下命令进行打开关闭: sudo /Applications/Privoxy/startPriv ...
- Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法。
http://fairwoodgame.com/blog/?p=38 Unity iOS打开AppStore评星页面,浅谈Application.OpenURL()方法. Posted in Uni ...
- python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...
题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...
- python打开方式错误_浅谈python 调用open()打开文件时路径出错的原因
昨晚搞鼓了一下python的open()打开文件 代码如下 def main(): infile =open("C:\Users\Spirit\Desktop\bc.txt",'r ...
- 浅谈作为一名软件开发,应该学什么、怎么学、怎样更好的提高自己?
作为一名Java软件开发,自己的感觉就是需要学的东西挺多的.工作中,会用到很多的技术,有些技术,可能看几篇技术博客之类的,就可以学会基本使用,有的技术包含的内容比较多,学起来当然就需要更多的时间了,工 ...
最新文章
- Nginx搭建静态资源映射实现远程访问服务器上的图片资源
- 安全观之我见(三):省银之道在预防
- 深入理解计算机操作系统:第2章 信息的表示和处理(学习笔记)
- 突破C++的虚拟指针--C++程序的缓冲区溢出攻击
- android 进程
- (42)Verilog HDL 打两拍设计
- pytorch torch.zeros
- 同一机器部署多个JVM
- scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
- VM14安装及使用环境配置
- UEFI 之 redfish
- 一只视频程序猿的移动直播SDK初体验
- 并联串联混合的电压和电流_并联电阻的计算公式(附各种并联电阻网络图解)...
- WP8最大的败笔就是只能用Win8做开发
- 一个基于互联网医疗的创业公司,三年是一个收获
- Java实现蓝桥杯二项式的系数规律
- 智能耳机测试软件,智能可穿戴设备有哪些?解析可穿戴设备的作用和测试
- 从键盘输入直接三角形的两条直接边的长度,求斜边的长度和三角形的面积,计算结果保留两位小数
- 光学设计ZEMAX——什么是MF、RMS均方根点半径
- Newtonsoft.Json.JsonSerializationException
热门文章
- QT的QMultiHash类的使用
- C语言程序的内存四区模型
- C++const 对指针和引用的作用
- jsp mysql视频_手把手教你做jsp servlet mysql实现的图书管理系统附带视频开发教程和完整源码...
- 「Python」python调用单个C++文件生成的动态库(.so)Part I
- Secondary NameNode:它究竟有什么作用?(转自:http://blog.csdn.net/xh16319/article/details/31375197)
- 第29天:控制进度,控制进度知识点,敏捷中控制进度知识点
- 04_关于元数据,ResultSetMetaData对象以及API方法介绍
- hibernate.jdbc.fetch_size 和 hibernate.jdbc.batch_size
- oracle_监听器无法启动的问题