c mysql 关闭连接池_数据库连接池关闭的时间
上一篇說到分析關閉連接與不關閉連接的性能,到后來我發現自己得出的結論有誤。經過多次測試發現關閉連接和不關閉連接耗費的時間基本一樣。進哥也說了這是有連接池的原因。其實,自己以前對Ado.net了解的不深,于是就到網上搜了下連接池。發現好多文章都差不多,現在網上文章到處轉載啊。ASP.NET數據庫連接池設置淺析就是一篇,話說里面關于連接池關閉的時間是這樣描述的 2.何時關閉連接池?
當連接池中的所有連接都已經關閉時關閉連接池。
看了之后我也迷糊了,在我的程序中也沒有其他的連接: 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();
}
上面程序一直在循環執行(如有不清楚可以查看上一盤文章),而且每次都關閉了連接,那豈不是每次都要創建連接池。
在我之前的測試中我發現,每次我重啟電腦之后的第一次運行程序的時間一定比其他的時間長,我想在是這是創建連接池花費了很多時間。相比之下每次new SqlConnection(),并執行SQl操作所需的時間只要創建連接池的十分之一時間。
現在基本上確定了那篇文章關于連接池關閉的時間是錯誤的,于是我就在想連接池到底是在什么時候關閉的。也提出了些想法:
在所有連接關閉之后的一定時間內關閉;
應用程序關閉的時候關閉;
那么我也就開始測試了,我在每次執行過方法后讓進程阻塞。5s,10s,20s,發現多沒有明顯的變化。糾結,我總不能去測試1h吧。就這樣我暫時放棄了這個測試。
在應用程序結束的時候關閉,不就是關閉瀏覽器嗎?簡單,但是測試了好多次發現運行時間沒有明顯的差距。不是這個問題了。
最后還是到網上去找連接池關閉的時間,查看官方的文檔吧:了解連接池。這篇文章里講了連接池關閉的時間:
連接的移除
如果連接長時間空閑,或池進程檢測到與服務器的連接已斷開,連接池進程會將該連接從池中移除。請注意,只有在嘗試與服務器進行通信后,才可以檢測到這種情況。如果發現某連接不再連接到服務器,則會將其標記為無效。連接池管理程序會定期掃描連接池,查找已釋放到池中并標記為無效的對象。找到后,這些連接將被永久移除。
如果存在一個與已消失的服務器的連接,如果連接池進程尚未檢測到斷開的連接并將連接標記為無效,可以從池中提取此連接。當發生這種情況時,將生成異常。但是,為了將該連接釋放回池中,仍必須將其關閉。
連接池的問題算是解決了,我又有了問題,可這是概念理解的問題:
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("不用連接
");
}
}
最終頁面一篇空白,我那時候是不明白啊。這里想到了,沒有關閉的連接就一直占用著的,于是在new的時候肯定是一個新的連接了。也就是說每次new出來的SqlConnection的狀態一定是關閉的。也就想到了上一篇文章的測試沒有用啊,在連接之前判斷反而是畫蛇添足啊!
以上的內容是個人見解,如有任何意見或見解希望能提出來!
總結
以上是生活随笔為你收集整理的c mysql 关闭连接池_数据库连接池关闭的时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php mysql建表_mysql建表测
- 下一篇: mysql mysqldumpslow_