ADO.NET数据库连接池研究(一) -查看连接池数 (转)

大家都知道ADO.NET自带链接池,而且在默认状态下是开启的,如果不设置的话,最大允许的链接个数为100个。

       那么怎么样能够看到连接池里现在活动的链接是多少了?

      讲过研究发现了,数据里的一个存储过程可以帮助我们,那就是sp_who

      为了验证这个事情,我们写了一个asp.net的程序并发布到windows2003的IIS服务器下建立了网站,同时为该网站指定独立的应用程序池。

       代码如下:

ADO.NET数据库连接池研究(一) -查看连接池数 - 萤火虫 - William Shared blog Code
SqlConnection conn = new SqlConnection("server=192.168.0.213;uid=sa;pwd=cpkf!@#$%^;database=test;");
             conn.Open();

             SqlCommand cmd
= new SqlCommand("select * from Tablese", conn);

             SqlDataAdapter sda
= new SqlDataAdapter(cmd);

             DataSet ds
= new DataSet();
             sda.Fill(ds);

       大家看上面的代码可以知道,数据库链接没有关闭,而且在这里tablese这个表是不存在的。这样页面就会出错。

       我通过两个客户端不停的按F5执行,然后在运行exec sp_who查看,得到结果如下:

      

540sleeping                      saCLONESERVER2                                                                                                                    
我就可纳闷了,为什么状态都是sleeping,而且cmd都是AWAITING COMMAND,经过在网上查找发现:

sleepingSPID 目前並未執行。通常表示該 SPID 正處於等待應用程式發出指令的狀態。

AWAITING COMMAND目前沒有任要需要處理的指令。

       这个就说明,之所有sleeping是因为我们没有关闭数据库链接,而这个链接在连接池里将再也不会被唤醒,随着积累,到了100个以后,其他程序就获得不了连接了,就会出现空引用异常(假如你在使用Connection对象没有做为空判断)。

       然后你把该网站的应用程序池重启,这个时候你再用sp_who去查看,所有的sleeping都不见了。

      总结:上述写的是对连接池中如果连接不关闭的情况进行的研究,不关闭连接时很糟糕的事情,同时也说明了怎么查看连接池中的链接,重要的是对sleeping的理解,一定不能把当做线程一样在休眠了,这就大错特错了,一旦出现这个情况,就说明该链接存在问题,可能没有被释放。


来自: http://hi.baidu.com/westfruit/blog/item/1bbebb097567bcc53bc76382.html

转载于:https://www.cnblogs.com/Godblessyou/archive/2012/05/23/2514484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值