[转] DataReader 不奇怪,该出手时就出手!

刚看到一篇文章:【原】关于使用DataReader的一个很奇怪的问题,不应该用DataReader?

于是准备花点时间解答下,顺便为这个月增添一篇文章。

关于DataReader,以前写过一篇文章,可参考:DataReader 链接关闭解惑篇

下面将对原文,解答两个问题:

一: DataReader、DataTable、DataSet 的简单关系:

这里先取原文的第一句话:.net 读取数据集有两种方式:DataSet 和 DataReader

解答:.net 的 Command 操作里,默认可以有三种返回:DataReader、DataTable、DataSet

这三者的简单关系为:

DataReader 快速只向前读的流,需要开发者自己去关闭流。

DataTable 一个容器,把DataReeader读到DataTable容器后关闭流。

DataSet 一个大容器,里面可放置多个DataTable。

因此开发者,首先要明白这三者的简单关系,才不至于乱猜。

二:数据库链接、链接池、close 与 dispose

这里再取原文的第N句话:在sqlserver(2000)中查看进程,有非常多的sleeping进程,直到最后打开页面,提示超时,说连接池满。

解答:默认mssql的链接数是有限的,大体在100多个,简单的说你可以 open 100多次而不关闭,超过后再 open 就会出现链接池不够的现象。

这之间的简单关系为:

第一次Open出链接时,连接数据库(由于是首次建立链接,需要初始化先多信息,就是传说的性能问题)

然后你Close时,数据库断开链接,同时把链接状态改成sleep,但是不销毁(为了下次建立链接时省掉初始化,避免传说中的性能问题),这个不销毁的链接,放到一个池里面,被称之为链接池。

如果你Dispose(),则会把链接从池里销毁,当然下次链接就会开始新的初始化。

下面就会有很多种情况出现:

情况一:一个线程的正常操作:

如果使用时一个流程下来,是按顺序的 open->close-open->close 状态,那么始终只用到一个链接(从连接池里进进出出),基本没有过多的初始化问题,传说性能好。

情况二:多个线程的不正常操作:

如果你一个链接,在 Open 状态,这时候另一个线程也要打开链接,发现链接池没有时,就会重新到数据库建一个链接(又开始初始化,一堆信息,最后产生一个链接)。

如果你所有的链接全在 Open,不关闭,或者时间拖的很多,在其它线程要链接的时候,你的链接还没关闭,在产生100多个链接后,数据库最大数满了,就会出现“链接池已满”的情况。

情况三:多个线程的正常操作:

如果你懂的每个链接打开后,都快速关闭,通常一个正常语句的操作时间在0.001-0.1秒左右,这样关闭的链接就回到池里,可以快速供给其它线程使用。

这样,仅需要几十个链接,就可以循环的使用处理多线程问题。

简单的假设:

如果一个操作 open 到 close ,用时0.1秒一次, 那么一个链接在1秒内可以处理10次操作。而100个链接最大数就可以支持1000次操作。

简单的说就是1秒可以并发操作1000次以上,这对中小网站来说,处理是相当容易的事。

而新手容易犯的错误,就是链接打开后,长时间的不关闭,最后导致在多线程的情况下,把数据库链接资源用尽了,出现了错误而不得知。

进一步的假设

在很多的程序处理中,对数据库的操作时间,往往是不平均的,这就需要有点经验的程序开发者,花点时间,来搞好这最大并发问题,通常是:

对长时间查询的,使用缓存(避免二次查询),或者集中使用队列(因为使用队列,就一个链接就可以搞定了,反正是开了读和关,然后下一个又是开了读和关,始终是一个链接),当然使用队列也要看情况。

对于时间短的,直接处理就可以了。

其实说白了,越往上,就越是“看情况处理”,没有啥定律,要是有,那就是数据库的最大链接数,无论你怎么耍流氓,反正你不能让它一次性给用完。 

补充点:

在 sqlserver(2000)中查看进程,有非常多的sleeping 进程,直到最后打开页面,提示超时,说连接池满,为什么,既然已经了很多 sleeping 的数据库连接, 为什么还会出现 不能连接数据库 的问题呢??

答:

对于 ADO.NET,它有一种机制,来分析是使用产生新的会话还是直接从链接池中返回,例如,不同的数据库链接,它会产生新的链接,而不会从原有链接池里返回。

而对于mssql,可能某种检测机制原因(不同的线程或进程链接),mssql 分析后直接是为你产生新的链接,而不是从 sleep 状态的链接池返回,因此,原来的 sleep无法复用,再次产生新的链接,就报链接池满了。

时间: 2024-08-26 19:47:31

[转] DataReader 不奇怪,该出手时就出手!的相关文章

機會不是天天有,該出手時就出手。

http://i2.feixin.10086.cn/pages/86801/1335646164 http://i2.feixin.10086.cn/pages/86801/1335646283 http://i2.feixin.10086.cn/pages/86801/1335646470 http://i2.feixin.10086.cn/pages/86801/1335646872 http://i2.feixin.10086.cn/pages/86801/1335647023 http:

李一男离开华为时给属下的忠告!(转给自己坎坷的求职路)

[1] 好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些.那么,就需要慎重安 排自己的轨迹.从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵 地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题.频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新 手! [2]可以做技术,切不可沉湎于技术.千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在

李一男离开华为时给属下的忠告!

[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些.那么,就需要慎重安排自己的轨迹.从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵 地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题.频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手! [2]可以做技术,切不可沉湎于技术.千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面

任正非接班人李一男离开华为时给属下的忠告

[1] 好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些.那么,就需要慎重安 排自己的轨迹.从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵 地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题.频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新 手! [2]可以做技术,切不可沉湎于技术.千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在

销售有时就是多一句话(探索需求)

销售,有时就是多一句话(探索需求) 2016-05-29 销售总监 学习使人进步 知道没有力量,悟到并做到才有力量! 在营销界有这样一个经典案例: 一老太太去买菜,路过四个水果摊.四家卖的苹果相近,但是老太太并没有在最先路过的第一家和第二家买苹果,而是在第三家买了一斤,更奇怪的是在第四家又买了两斤. 1.摊主一 老太太去买菜,路过水果摊,看到卖苹果的摊主,就问:苹果怎么样啊? 摊主回答:我的苹果特别好吃,又大又甜!. 老太太摇摇头走开了(只讲产品的卖点不探求需求,都是无效介绍,做不了单) 2.摊

晁盖为何不传位给宋江

曾头市晁盖中了毒箭,神医安道全也回天无力,终于命丧黄泉.弥留之际,原本"已自言语不得"的晁盖忽然醒了过来,"转头看着宋江",谆谆嘱咐道:"贤弟保重.若哪个捉得射死我的,便教他做梁山泊主!"这便是晁盖的"临终嘱咐",也是晁盖的惟一遗言.         晁盖这遗言好没道理.         晁盖这"梁山泊主"是怎么当上的?不是世袭的,不是选举的,也不是指定的,而是林冲火并了王伦,众人拥戴的.说白了,他这&qu

我是平民:一个平民怎样投资房产致富

我反问:"房价是不是没有跌7你没有告诉我你要买房,否则我会让你再等两个月." 后来房价上涨速度非常之快.其实不到半年,他的房价涨幅已经超过了税款的额度. 我看透明售房系统 又如透明售房系统.杭州向上海学习,于2004年下半年启动了透明售房系统,推动新建楼盘的公平销售.挤走房产投机者.一般人看来,这个系统必定给消费者以公平的机会,但是实际上并不完全是这样的. 我一直关注下沙的小户型房产.2005年元旦.下沙的"十六街区"即将开盘,我收到房产公司的邀请专门去听了他们的楼

如何成就一番事业

1,事业永远第一 虽然金钱不是万能的,但没有钱是万万不能的,虽然这句话很俗,但绝对有道理,所以30岁之前,请把你大部分精力放在你的事业上. 2,别把钱看得太重 不要抱怨自己现在工资低,银行存款4位数以下,看不到前途,现在要做的就是努力学习,即使你文凭再高,怎么把理论运用到实践还是需要一个很长的锻炼过程,社会永远是一所最博大的大学,它让你学到的知识远比你在学校学到的重要得多,所以同样,你也别太介意学历低.30岁之前靠自己能力买车买房的人还是极少. 3,学会体谅父母 别嫌他们唠叨,等你为人父了你就知

[转]小品:宋江同志在梁山泊招安动员大会上的讲话

时间:2012-12-27 15:35 来源:未知 作者:zhao123 点击: 564 次 小品:宋江同志在梁山泊招安动员大会上的讲话 作者: 大宋和谐会馆12/08/2012:华岳论坛 - http://www.hua-yue.net/ 同志们: 今天我们在忠义堂隆重集会,只有一个主题:接受招安.我跟卢俊义同志交换了意见,我们一致认为,从现在起,务必把梁山泊的工作重点由继续造反坚决转移到接受招安上来.这是关系到梁山党生死存亡.前途命运的无比重大的政治决策.接受招安与继续造反,是两个阶级.两条