淺談如何更好的打開和關(guān)閉ADO.NET連接池
以下做一次簡單的測試:
測試方式是使用VS2008自帶的負(fù)載測試,測試用戶數(shù)是200,數(shù)據(jù)庫連接池?cái)?shù)設(shè)置20,測度時(shí)長10分鐘。
關(guān)閉ADO.NET連接池測試代碼1:
protected void Page_Load(object sender, EventArgs e)
{
using (System.Data.SqlClient.SqlConnection sqlconn= new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
System.Threading.Thread.Sleep(300);
}
}
關(guān)閉ADO.NET連接池測試代碼2:
protected void Page_Load(object sender, EventArgs e)
{
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(50);
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection("data source=.;initial catalog=northwind;user id=sa;pwd=;Max Pool Size=20"))
{
sqlconn.Open();
}
System.Threading.Thread.Sleep(100);
}
關(guān)閉ADO.NET連接池測試結(jié)果1
<!--[if !vml]-->
<!--[endif]-->
關(guān)閉ADO.NET連接池測試結(jié)果2
<!--[if !vml]-->
<!--[endif]-->
從以上測試結(jié)果來看顯然是MS所提倡的方式在某些情況是更好的,因?yàn)殡S著并發(fā)用戶的提高,即用即斷的方式總體上表現(xiàn)效果更佳。還有一點(diǎn)非常重要就是***種代碼方式會(huì)啟用了池的***數(shù)據(jù)庫連接數(shù),而第二種代碼方式只使用了6個(gè)數(shù)據(jù)庫連接;這一點(diǎn)進(jìn)一步說明了,即用即斷在某種情況下更節(jié)省數(shù)據(jù)庫連接資源。
雖然結(jié)果這樣但不代表是什么情況都使用即用即斷好,當(dāng)池不會(huì)讓用戶在門外等的情況是不需要用的,當(dāng)N個(gè)數(shù)據(jù)庫操作間沒其他特別耗時(shí)的運(yùn)算***就用一個(gè)連接(對(duì)于這個(gè)耗時(shí)多長就根據(jù)你實(shí)際情況作出權(quán)衡了),對(duì)于什么情況應(yīng)該怎樣做其實(shí)通過測試就能找到答案。不過我個(gè)人推薦還是用MS提倡的:),本人一向都是采用這種方式。
【編輯推薦】