c mysql 关闭连接池_数据库连接池关闭的时间
上一篇說到分析關(guān)閉連接與不關(guān)閉連接的性能,到后來我發(fā)現(xiàn)自己得出的結(jié)論有誤。經(jīng)過多次測試發(fā)現(xiàn)關(guān)閉連接和不關(guān)閉連接耗費的時間基本一樣。進哥也說了這是有連接池的原因。其實,自己以前對Ado.net了解的不深,于是就到網(wǎng)上搜了下連接池。發(fā)現(xiàn)好多文章都差不多,現(xiàn)在網(wǎng)上文章到處轉(zhuǎn)載啊。ASP.NET數(shù)據(jù)庫連接池設(shè)置淺析就是一篇,話說里面關(guān)于連接池關(guān)閉的時間是這樣描述的 2.何時關(guān)閉連接池?
當連接池中的所有連接都已經(jīng)關(guān)閉時關(guān)閉連接池。
看了之后我也迷糊了,在我的程序中也沒有其他的連接: public static voidInsertError() {
SqlConnectionconn = newSqlConnection(connString);
stringcmdtxt = "INSERT INTO [NcuhomeORG].[dbo].[SysErrorLogs]([ErrorLogID],[ErrorMsg] ,[ErrorUrl],[ErrorDatetime])VALUES (1,'hahah','fffff','2009-12-26 11:33:08')";
SqlCommandcmd = newSqlCommand(cmdtxt, conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
上面程序一直在循環(huán)執(zhí)行(如有不清楚可以查看上一盤文章),而且每次都關(guān)閉了連接,那豈不是每次都要創(chuàng)建連接池。
在我之前的測試中我發(fā)現(xiàn),每次我重啟電腦之后的第一次運行程序的時間一定比其他的時間長,我想在是這是創(chuàng)建連接池花費了很多時間。相比之下每次new SqlConnection(),并執(zhí)行SQl操作所需的時間只要創(chuàng)建連接池的十分之一時間。
現(xiàn)在基本上確定了那篇文章關(guān)于連接池關(guān)閉的時間是錯誤的,于是我就在想連接池到底是在什么時候關(guān)閉的。也提出了些想法:
在所有連接關(guān)閉之后的一定時間內(nèi)關(guān)閉;
應(yīng)用程序關(guān)閉的時候關(guān)閉;
那么我也就開始測試了,我在每次執(zhí)行過方法后讓進程阻塞。5s,10s,20s,發(fā)現(xiàn)多沒有明顯的變化。糾結(jié),我總不能去測試1h吧。就這樣我暫時放棄了這個測試。
在應(yīng)用程序結(jié)束的時候關(guān)閉,不就是關(guān)閉瀏覽器嗎?簡單,但是測試了好多次發(fā)現(xiàn)運行時間沒有明顯的差距。不是這個問題了。
最后還是到網(wǎng)上去找連接池關(guān)閉的時間,查看官方的文檔吧:了解連接池。這篇文章里講了連接池關(guān)閉的時間:
連接的移除
如果連接長時間空閑,或池進程檢測到與服務(wù)器的連接已斷開,連接池進程會將該連接從池中移除。請注意,只有在嘗試與服務(wù)器進行通信后,才可以檢測到這種情況。如果發(fā)現(xiàn)某連接不再連接到服務(wù)器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中并標記為無效的對象。找到后,這些連接將被永久移除。
如果存在一個與已消失的服務(wù)器的連接,如果連接池進程尚未檢測到斷開的連接并將連接標記為無效,可以從池中提取此連接。當發(fā)生這種情況時,將生成異常。但是,為了將該連接釋放回池中,仍必須將其關(guān)閉。
連接池的問題算是解決了,我又有了問題,可這是概念理解的問題:
protected voidPage_Load(objectsender, EventArgse) {
Actionc = () => tests();
test.Profile(c, 15);
}
protected voidtests() {
SqlConnectionconn = newSqlConnection(ConfigurationManager.ConnectionStrings["NcuhomeORGConnectionString"].ConnectionString);
if(conn.State != ConnectionState.Open)
conn.Open();
else{
Response.Write("不用連接
");
}
}
最終頁面一篇空白,我那時候是不明白啊。這里想到了,沒有關(guān)閉的連接就一直占用著的,于是在new的時候肯定是一個新的連接了。也就是說每次new出來的SqlConnection的狀態(tài)一定是關(guān)閉的。也就想到了上一篇文章的測試沒有用啊,在連接之前判斷反而是畫蛇添足啊!
以上的內(nèi)容是個人見解,如有任何意見或見解希望能提出來!
總結(jié)
以上是生活随笔為你收集整理的c mysql 关闭连接池_数据库连接池关闭的时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql建表_mysql建表测
- 下一篇: spring resttemplate