日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

浅谈如何更好的打开和关闭ADO.NET连接池

發布時間:2024/9/20 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈如何更好的打开和关闭ADO.NET连接池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MS提倡我們盡可能每次的在連接使用完成后就關閉;這樣導致每次都要進行打開和關閉操作或用using(){…}寫起代碼比較麻煩,還有經常對池的操作似乎也帶來一些性能上的問題;在Asp.net里一個WebForm經常涉及有N個數據庫操作,為了方便直接在init里打開一個連接,然后在Dispose里關閉即省事又能減少對池的操作提高性能;那到底這樣做能不能提高性能呢?答案是能,但有些情況估計會很讓你感覺到失望…。當池的連接數能應付用戶請求的時候,的確是可以減少池的操作帶來性能的提升;反之就不一樣了用戶必須等待到獲取連接后才能進行其他操作,當有更多用戶在等待獲取連接的時候只能讓線程處于更長等待時間導致服務總體處理能力下降。

以下做一次簡單的測試:

測試方式是使用VS2008自帶的負載測試,測試用戶數是200,數據庫連接池數設置20,測度時長10分鐘。

關閉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);

??????????? }

}

關閉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);

??????? }

關閉ADO.NET連接池測試結果1

<!--[if !vml]-->

498)this.style.width=498;" height=582>


<!--[endif]-->

關閉ADO.NET連接池測試結果2

<!--[if !vml]-->

498)this.style.width=498;" height=584>


<!--[endif]-->

從以上測試結果來看顯然是MS所提倡的方式在某些情況是更好的,因為隨著并發用戶的提高,即用即斷的方式總體上表現效果更佳。還有一點非常重要就是第一種代碼方式會啟用了池的最大數據庫連接數,而第二種代碼方式只使用了6個數據庫連接;這一點進一步說明了,即用即斷在某種情況下更節省數據庫連接資源。

雖然結果這樣但不代表是什么情況都使用即用即斷好,當池不會讓用戶在門外等的情況是不需要用的,當N個數據庫操作間沒其他特別耗時的運算最好就用一個連接(對于這個耗時多長就根據你實際情況作出權衡了),對于什么情況應該怎樣做其實通過測試就能找到答案。不過我個人推薦還是用MS提倡的:),本人一向都是采用這種方式。??

總結

以上是生活随笔為你收集整理的浅谈如何更好的打开和关闭ADO.NET连接池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。