成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細分析C#數據庫連接池

開發 后端
當數據庫操作和訪問頻繁的時候,減少創建連接和打開連接所耗的時間,提升數據庫服務器的性能。 這里將詳細分析C#數據庫連接池。

使用C#數據庫連接池

連接到數據庫服務器通常由幾個需要軟長時間的步驟組成。必須建立物理通道(例如套接字或命名管道),必須與服務器進行初次連接,必須分析連接字符串信息,必須由服務器對連接進行身份驗證,等等。

實際上,大部份的應用程序都是使用一個或幾個不同的連接配置。當應用程序的數據量和訪問量大的時候,這意味著在運行應用程序的過程中,許多相同的連接將反復地被打開和關閉,從而會引起數據庫服務器效率低下甚至引發程序崩潰。為了確保應用程序的穩定和降低性能成本,我們可以在ADO.NET中使用稱為連接池的優化方法來管理維護連接。

C#數據庫連接池可以減少創建連接的次數。定義最小連接數(固定連接數),當用戶在連接上調用Open,連接池就會檢查池中是否有可用的連接。如果發現有連接可用,會將該連接返回給調用者,而不是創建新連接。應用程序在該連接上調用Close時,連接池會判斷該連接是否在最小連接數之內,如果“是”會將連接回收到活動連接池中而不是真正關閉連接,否則將燒毀連接。連接返回到池中之后,即可在下一個Open調用中重復使用。

創建C#數據庫連接池

以下示例使用C#連接SQL數據庫:

  1. classDbConn  
  2. {  
  3. //usingSystem.Data;  
  4. //usingSystem.Data.SqlClient;  
  5. privateconstintMaxPool=10;//***連接數  
  6. privateconstintMinPool=5;//最小連接數  
  7. privateconstboolAsyn_Process=true;//設置異步訪問數據庫  
  8. privateconstboolMars=true;//在單個連接上得到和管理多個、僅向前引用和只讀的結果集(ADO.NET2.0)  
  9. privateconstintConn_Timeout=15;//設置連接等待時間  
  10. privateconstintConn_Lifetime=15;//設置連接的生命周期  
  11. privatestringConnString="";//連接字符串  
  12. privateSqlConnectionSqlDrConn=null;//連接對象  
  13.  
  14. publicDbConn()//構造函數  
  15. {  
  16. ConnString=GetConnString();  
  17. SqlDrConn=newSqlConnection(ConnString);  
  18. }  
  19.  
  20. privatestringGetConnString()  
  21. {  
  22. return"server=localhost;" 
  23. +"integratedsecurity=sspi;" 
  24. +"database=pubs;" 
  25. +"MaxPoolSize="+MaxPool+";" 
  26. +"MinPoolSize="+MinPool+";" 
  27. +"ConnectTimeout="+Conn_Timeout+";" 
  28. +"ConnectionLifetime="+Conn_Lifetime+";" 
  29. +"AsynchronousProcessing="+Asyn_Process+";";  
  30. //+"MultipleActiveResultSets="+Mars+";";  
  31. }  
  32.  
  33. publicDataTableGetDataReader(stringStrSql)//數據查詢  
  34. {  
  35. //當連接處于打開狀態時關閉,然后再打開,避免有時候數據不能及時更新  
  36. if(SqlDrConn.State==ConnectionState.Open)  
  37. {  
  38. SqlDrConn.Close();  
  39. }  
  40. try 
  41. {  
  42. SqlDrConn.Open();  
  43. SqlCommandSqlCmd=newSqlCommand(StrSql,SqlDrConn);  
  44. SqlDataReaderSqlDr=SqlCmd.ExecuteReader();  
  45. if(SqlDr.HasRows)  
  46. {  
  47. DataTabledt=newDataTable();  
  48. //讀取SqlDataReader里的內容  
  49. dt.Load(SqlDr);  
  50. //關閉對象和連接  
  51. SqlDr.Close();  
  52. SqlDrConn.Close();  
  53. returndt;  
  54. }  
  55. returnnull;  
  56. }  
  57. catch(Exceptionex)  
  58. {  
  59. System.Windows.Forms.MessageBox.Show(ex.Message);  
  60. returnnull;  
  61. }  
  62. finally 
  63. {  
  64. SqlDrConn.Close();  
  65. }  
  66. }  
  67. }  

通過調用SqlDrConn.Open()方法打開連接,這時候連接池就會初始化并建立設定的最小連接數。想更清楚了解到連接池的狀況可以通過SQL的查詢分析器執行存儲過程sp_Who,它會列出當前的數據庫進程,查看loginname、dbname可以區分用戶的連接信息,但要注意的是登錄查詢分析器本身會使用兩個連接,所以***用另一個用戶名登錄查詢分析器。使用此方法還有一個麻煩地方就是要經常按“執行查詢”以更新進程信息。還有另一種方法個人認為較好的,通過控制面板→管理工具→性能,右擊添加計算器,性能對象選擇SQlServer:GeneralStatistics(常規統計)然后計算器選擇UserConnections(用戶連接)***按“添加”就可以實時查看當前連接數。

到了這里,連接池已經實現了,但問題往往會出現在運行過程中。如連接池的連接數滿了該怎樣處理?在這里我們應該合理設置連接字符串中的ConnectTimeout屬性和ConnectionLifetime屬性(上面有解釋)延長等待時間,盡可能地在每次使用完連接之后調用Close方法關閉連接。但從中也有沒法避免的,當連接數滿了并且申請連接的時間超過設置連接等待的時間時,程序將會引發InvalidOperationExceptio異常,我們可以通過捕獲此異常向用戶界面提示“系統正忙,請稍后再連接……”之類的信息來緩解這種情況。此外,也有另一種方法來解決這種情況,就是利用ADO.NET2.0新特性“異步進程”,對數據庫進行異步操作,確保連接能夠及時調用Close方法關閉連接,這樣能大大減少正在使用的連接數。

使用方法:在連接字符串中加上AsynchronousProcessing=true表示使用異步處理操作。

當應用程序不再需要用到連接池的時候可以使用ClearPool或ClearAllPools方法清空連接池也可作重置連接池使用,方法如下:

SqlConnection.ClearPool(SqlConnectionconnection)清空關聯的連接池

SqlConnection.ClearAllPools()清空所有連接池

調用上述方法,如果連接正在使用,連接池會做相應標記,等連接關閉時自動燒毀。

小結C#數據庫連接池

優點:當數據庫操作和訪問頻繁的時候,減少創建連接和打開連接所耗的時間,提升數據庫服務器的性能。

缺點:數據庫連接池中可能存在著多個沒有被使用的連接一直連接著數據庫,這意味著資源的浪費。

【編輯推薦】

  1. 簡單介紹C#預處理
  2. 學習C#無詞尾符號經驗談
  3. C#調用QuickTest自動化
  4. 詳解C#正規表達式
  5. C#字符串插入html標簽
責任編輯:彭凡 來源: 25175.net
相關推薦

2009-09-03 17:57:06

C#聲明事件

2009-09-04 15:43:07

C#流模型

2009-09-07 13:19:44

C#線程同步

2009-09-07 14:18:01

C#內存管理

2009-11-20 13:11:44

Oracle XML數

2010-04-21 13:40:04

Oracle數據庫

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基礎

2009-12-31 15:39:46

ADO.NET訪問數據

2010-04-15 11:33:39

Oracle數據庫

2009-09-09 09:48:43

Linq延遲加載

2009-09-14 16:21:34

LINQ To XML

2009-06-18 14:00:51

2009-10-10 13:52:57

VB Update方法

2010-02-23 17:44:22

WCF數據契約

2009-09-14 13:50:35

LINQ編程模型

2009-09-08 15:56:50

Linq使用Group

2010-01-06 13:50:37

.NET Framew

2010-03-04 09:30:40

Linux動態庫

2010-03-18 14:55:17

Python數據庫連接
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人a视频| 久久男女视频 | 欧美日韩成人在线观看 | 免费在线观看一区二区 | 亚洲一区av | 国产精品久久久久久久一区二区 | 日韩黄色av | 久久精品这里精品 | 一区亚洲 | 综合久久综合久久 | 精品国产一区久久 | 亚洲人成在线播放 | 精区3d动漫一品二品精区 | 99精品国产一区二区三区 | 国产精品美女久久久久久久网站 | 日韩在线综合网 | 久久久久国产精品人 | 精品欧美二区 | 国产一区二区免费 | av网站在线免费观看 | 亚洲国产一区在线 | 男女爱爱福利视频 | 色偷偷888欧美精品久久久 | 精品福利视频一区二区三区 | 伊人超碰在线 | 久久精品久久久 | 精品免费视频一区二区 | 亚洲精品一二三 | 手机看片169 | 国产成人精品一区二区 | 成人免费精品视频 | 久久久久亚洲精品国产 | 亚洲女人的天堂 | 一区二区视频在线 | 亚洲成人久久久 | 欧美性一区二区三区 | 亚洲午夜网 | 蜜桃毛片 | 欧洲尺码日本国产精品 | 综合激情久久 | 在线观看中文字幕视频 |