日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳細分析C#數(shù)據(jù)庫連接池

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

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、冊亨網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、冊亨網(wǎng)絡(luò)營銷、冊亨企業(yè)策劃、冊亨品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供冊亨建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


新聞標題:詳細分析C#數(shù)據(jù)庫連接池
鏈接地址:http://m.5511xx.com/article/cdjpice.html