新人,勿笑。
我想问的第一个问题是:Max Pool Size可有上限,还是根据机器配置的,机器不行,就是数值给大了,会生产卡死等问题。
第二个问题是:连接是不是con.Open()了算开始使用了,con.Close就是停止使用了,又放回池里面了。con.Dispose()也是停止使用了,并把这个连接从池里面删除了(同第三个问题)。
第三个问题是:con.Close()关闭是不是把连接放回池里面了,等以后用。
con.Dispose()是不是把连接关闭,并从池里面也释放删除了,就是池里面没有这个连接了。
如果池里面有10个连接,con.Dispose()一次是不是只有9个了。
SQLHelper.cs的代码
/// <summary> /// 关闭连接池 /// </summary> public static void Close() { if (con != null) con.Close(); } /// <summary> /// 释放连接池 /// </summary> public static void Dispose() { // 确定连接已关闭 if (con != null) { con.Dispose(); con = null; } }
第四个问题:Max Pool Size = 5,是不是只要连接字符串相同,我con.Open()的时候。如果池里面有5个,con.Open()做了什么操作还是什么没有做。如果池有4个连接,是不是补1个进去。
第五个问题:dr2.Close()是不是只要在大循环后面调用一次就行了还是像现在代码这样调用,或是在什么地方调用最合适。小循环后要不要调用SQLHelper.Close()。
while(dr.Read())//大循环 { dr2=SQLHelper.ExecuteReader(""); while(dr2.Read())//小循环 { } dr2.Close(); SQLHelper.Close(); } dr.Close(); SQLHelper.Close();
有知道确定答案的麻烦正面回答下,谢谢了。
第一个问题:max pool size最大值32767
http://www.cnblogs.com/lyhabc/articles/2797351.html
第二个问题:close也是调用dispose的,也是把连接放回连接池,不会删除
一般调用close()就可以了
第三个问题:连接池不是由你来控制,由.net framework的数据库驱动程序来控制
连接池内部实际上就是一个线程池,这个线程池是由连接池的管理控件管理的(说白了就是:客户端数据库驱动程序)
http://www.cnblogs.com/lyhabc/archive/2012/12/01/2797559.html
第四个问题:不是说max pool size=5默认就有5个连接给你用,你第一次使用的时候也是要重新创建这个数据库连接,当你第二次使用的时候才重用,至于重用哪一个由驱动程序来控制,max pool size=5只是设置连接池的上限,你在连接字符串里指定了之后,那么你这个应用程序从一开始启动就只能使用5个连接,如果你改配置文件里的连接字符串,除非你重新启动应用程序
第五个问题:首先你要加try{} catch{} 块,还有,一般调用都放在末尾
1 while(dr.Read())//大循环 2 { 3 dr2=SQLHelper.ExecuteReader(""); 4 while(dr2.Read())//小循环 5 { 6 7 } 8 9 } 10 dr.Close(); 11 dr2.Close(); 12 SQLHelper.Close();
嗯。我终于搞明白了。谢谢你。
关注一下,等高手回答
我天天在关注。今天星期一。看可有结果。
数据库帮助类?
建议楼主使用开源数据库连接池,或者成熟一点的连接池!这样尽可能的减少不必要的问题!
数据池假设默认配置10 size,那么你关闭只是从连接池到app关闭!数据池和数据库并没有关闭!
数据池就是永远为app建立有你配置个数据的连接在那里!你用或者不用,它就在那里不增不减!
麻烦推荐一个。谢谢。
@oran176:
proxool,
C3P0,
谢谢
不要在Dispose()方法中执行数据库连接关闭的操作,你需要立即释放有限的连接资源而不是等待时机不定的垃圾回收的机制。
嗯。我想明白我问的几个问题。