您的位置:首页 > 其它

解决一个问题的思路 之“解决已经写满con.close() 仍然出现"但是尚未从池中获取连接"的连接池耗尽问题”

2009-06-07 07:13 323 查看
来cnblogs快一年了,斗胆发一篇在首页,

这篇文章主要写解决一个网上答案不能解决自己问题的时候,解决问题的整个流程,

如果大家觉得这个没价值,还请管理员帮忙撤销发首页

先谢谢各位了。

一年前帮学校做了一个就业信息管理系统,

当时图热闹,觉得虽然说学校人不是很多,但是看惯了大家对GridView的性能的漫骂,

抱着练手的想法,自己用repeater 代替了GridView 来做数据显示

之后系统采用三层架构设计。。。。

之后做好了在自己本机上怎么测都没毛病,觉得差不多了

就向学校申请服务器架设,

结果没用几天,出毛病了, 老是提示

“超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 ”

ok,google 了下,这个一般是因为DbConnection 开启了之后忘记关闭的(参见/article/5480475.html

自己本身写了个DbHelper,改起来应该很快,

结果一看,雷到了,原来我在DbHelper里面已经关闭了啊

Code

for (int i = 0; i < Bll_JiuyeList.getPageCount(PAGESIZE, getStrWhere()); i++)
{
DropDownList_Jump.Items.Add((i + 1).ToString());
}
DropDownList_Jump.SelectedValue = "1";

想必大家一眼就看到了这个错误,

for语句中 判断是每循环一次都要执行的,然而我在判断i 的时候竟然将判断条件写成了调用“逻辑业务层”,逻辑业务层调用数据链路层,

这样直接导致了循环有多少次,就查了多少次数据库。。。。。。

将这个地方更正,连接数立马下降到5个以内。。。。

至此,遗留了1年的bug,就此解决。。。。。。

ok,总结下吧。

---------------------------------------------------

第一,要相信科学。当出现那个“超时时间已到”的提示,之后google后按照方法做,还是不行的时候,要坚信,这是会解决的。

第二,临时方法靠不住。临时方法临时解决问题,只有找到处问题的根源,才能真正的解决问题。

第三,for语句中的判断条件,一定要慎重,再慎重,除非确定必要,否则坚决不在此使用任何函数,特别是可能操作数据库的函数

---------------------------------------------------

恩恩,写完了,希望本文能给您带来一些收获,

再次感谢您看完这篇文章,也希望多多与大家交流,

第一次发在首页,压力很大,但是真的很想与大家分享这次经验

如果不适合放首页,麻烦管理员撤下,谢谢了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐