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

詳細(xì)分析C#數(shù)據(jù)庫(kù)連接池

開發(fā) 后端
當(dāng)數(shù)據(jù)庫(kù)操作和訪問(wèn)頻繁的時(shí)候,減少創(chuàng)建連接和打開連接所耗的時(shí)間,提升數(shù)據(jù)庫(kù)服務(wù)器的性能。 這里將詳細(xì)分析C#數(shù)據(jù)庫(kù)連接池。

使用C#數(shù)據(jù)庫(kù)連接池

連接到數(shù)據(jù)庫(kù)服務(wù)器通常由幾個(gè)需要軟長(zhǎng)時(shí)間的步驟組成。必須建立物理通道(例如套接字或命名管道),必須與服務(wù)器進(jìn)行初次連接,必須分析連接字符串信息,必須由服務(wù)器對(duì)連接進(jìn)行身份驗(yàn)證,等等。

實(shí)際上,大部份的應(yīng)用程序都是使用一個(gè)或幾個(gè)不同的連接配置。當(dāng)應(yīng)用程序的數(shù)據(jù)量和訪問(wèn)量大的時(shí)候,這意味著在運(yùn)行應(yīng)用程序的過(guò)程中,許多相同的連接將反復(fù)地被打開和關(guān)閉,從而會(huì)引起數(shù)據(jù)庫(kù)服務(wù)器效率低下甚至引發(fā)程序崩潰。為了確保應(yīng)用程序的穩(wěn)定和降低性能成本,我們可以在ADO.NET中使用稱為連接池的優(yōu)化方法來(lái)管理維護(hù)連接。

C#數(shù)據(jù)庫(kù)連接池可以減少創(chuàng)建連接的次數(shù)。定義最小連接數(shù)(固定連接數(shù)),當(dāng)用戶在連接上調(diào)用Open,連接池就會(huì)檢查池中是否有可用的連接。如果發(fā)現(xiàn)有連接可用,會(huì)將該連接返回給調(diào)用者,而不是創(chuàng)建新連接。應(yīng)用程序在該連接上調(diào)用Close時(shí),連接池會(huì)判斷該連接是否在最小連接數(shù)之內(nèi),如果“是”會(huì)將連接回收到活動(dòng)連接池中而不是真正關(guān)閉連接,否則將燒毀連接。連接返回到池中之后,即可在下一個(gè)Open調(diào)用中重復(fù)使用。

創(chuàng)建C#數(shù)據(jù)庫(kù)連接池

以下示例使用C#連接SQL數(shù)據(jù)庫(kù):

  1. classDbConn  
  2. {  
  3. //usingSystem.Data;  
  4. //usingSystem.Data.SqlClient;  
  5. privateconstintMaxPool=10;//***連接數(shù)  
  6. privateconstintMinPool=5;//最小連接數(shù)  
  7. privateconstboolAsyn_Process=true;//設(shè)置異步訪問(wèn)數(shù)據(jù)庫(kù)  
  8. privateconstboolMars=true;//在單個(gè)連接上得到和管理多個(gè)、僅向前引用和只讀的結(jié)果集(ADO.NET2.0)  
  9. privateconstintConn_Timeout=15;//設(shè)置連接等待時(shí)間  
  10. privateconstintConn_Lifetime=15;//設(shè)置連接的生命周期  
  11. privatestringConnString="";//連接字符串  
  12. privateSqlConnectionSqlDrConn=null;//連接對(duì)象  
  13.  
  14. publicDbConn()//構(gòu)造函數(shù)  
  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)//數(shù)據(jù)查詢  
  34. {  
  35. //當(dāng)連接處于打開狀態(tài)時(shí)關(guān)閉,然后再打開,避免有時(shí)候數(shù)據(jù)不能及時(shí)更新  
  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里的內(nèi)容  
  49. dt.Load(SqlDr);  
  50. //關(guān)閉對(duì)象和連接  
  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. }  

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

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

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

當(dāng)應(yīng)用程序不再需要用到連接池的時(shí)候可以使用ClearPool或ClearAllPools方法清空連接池也可作重置連接池使用,方法如下:

SqlConnection.ClearPool(SqlConnectionconnection)清空關(guān)聯(lián)的連接池

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

調(diào)用上述方法,如果連接正在使用,連接池會(huì)做相應(yīng)標(biāo)記,等連接關(guān)閉時(shí)自動(dòng)燒毀。

小結(jié)C#數(shù)據(jù)庫(kù)連接池

優(yōu)點(diǎn):當(dāng)數(shù)據(jù)庫(kù)操作和訪問(wèn)頻繁的時(shí)候,減少創(chuàng)建連接和打開連接所耗的時(shí)間,提升數(shù)據(jù)庫(kù)服務(wù)器的性能。

缺點(diǎn):數(shù)據(jù)庫(kù)連接池中可能存在著多個(gè)沒(méi)有被使用的連接一直連接著數(shù)據(jù)庫(kù),這意味著資源的浪費(fèi)。

【編輯推薦】

  1. 簡(jiǎn)單介紹C#預(yù)處理
  2. 學(xué)習(xí)C#無(wú)詞尾符號(hào)經(jīng)驗(yàn)談
  3. C#調(diào)用QuickTest自動(dòng)化
  4. 詳解C#正規(guī)表達(dá)式
  5. C#字符串插入html標(biāo)簽
責(zé)任編輯:彭凡 來(lái)源: 25175.net
相關(guān)推薦

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#內(nèi)存管理

2009-11-20 13:11:44

Oracle XML數(shù)

2009-12-31 15:39:46

ADO.NET訪問(wèn)數(shù)據(jù)

2010-04-15 11:33:39

Oracle數(shù)據(jù)庫(kù)

2010-04-21 13:40:04

Oracle數(shù)據(jù)庫(kù)

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基礎(chǔ)

2009-09-14 13:50:35

LINQ編程模型

2009-09-08 15:56:50

Linq使用Group

2010-01-06 13:50:37

.NET Framew

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數(shù)據(jù)契約

2010-03-18 14:55:17

Python數(shù)據(jù)庫(kù)連接

2009-06-24 07:53:47

Hibernate數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美一区2区三区3区公司 | 欧美精品日韩精品 | 国产精品3区 | 国产精品视频久久 | 在线免费观看a级片 | 久久中文字幕一区 | 欧美精品一区二区三区在线播放 | 国产精品自拍视频 | 91电影在线 | 欧美激情亚洲 | 欧美9999| 精品乱人伦一区二区三区 | 手机看片1 | 天天躁日日躁狠狠的躁天龙影院 | 久草网视频 | 日韩免费一区二区 | 国产亚洲网站 | 中文字幕亚洲精品 | 91久久精品视频 | 精品中文字幕在线 | 国产情侣激情 | 97偷拍视频 | 成人精品一区亚洲午夜久久久 | 久久久久久国产精品三区 | 精品色| 综合国产 | 日本精品视频一区二区 | 亚洲精品一 | 亚洲精品91 | 亚洲第一成人av | 国产欧美精品在线 | 国产欧美精品一区二区 | 精品国产欧美一区二区三区成人 | av一区二区三区四区 | 99视频免费在线 | 亚洲一区在线日韩在线深爱 | 久久久久国产一区二区三区四区 | 成人一区av偷拍 | 夏同学福利网 | 高清欧美性猛交xxxx黑人猛交 | 精品视频一区二区三区 |