好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > ADO.NET數據連接池剖析

ADO.NET數據連接池剖析

熱門標簽:溫州語音外呼系統代理 北京辦理400電話多少 智能語音外呼系統哪個牌子好 重慶防封電銷機器人供應商 南京電銷外呼系統運營商 400電話申請需要開戶費嗎 山西語音外呼系統價格 威海智能語音外呼系統 西安青牛防封電銷卡
本篇文章起源于在GCR MVP Open Day的時候和C# MVP張響討論連接池的概念而來的。因此單獨寫一篇文章剖析一下連接池。

為什么需要連接池
剖析一個技術第一個要問的是,這項技術為什么存在。
對于每一個到SQL Server的連接,都需要經歷TCP/IP協議的三次握手,身份認證,在SQL Server里建立連接,分配資源等。而當客戶端關閉連接時,客戶端就會和SQL Server終止物理連接。但是,我們做過數據庫開發的人都知道,每次操作完后關閉連接是再正常不過的事了,一個應用程序即使在負載不大的情況下也需要不停的連接SQL Server和關閉連接,同一個應用程序同時也可能存在多個連接。

因此,如果不斷的這樣建立和關閉連接,會是非常浪費資源的做法。因此Ado.net中存在連接池這種機制。在對SQL Server來說的客戶端的應用程序進程中維護連接池。統一管理Ado.net和SQL Server的連接,既連接池保持和SQL Server的連接,當Connection.Open()時,僅僅從連接池中分配一個已經和SQL Server建立的連接,當Connection.Close()時,也并不是和SQL Server物理斷開連接,僅僅是將連接進行回收。

因此,連接池總是能維護一定數量的和SQL Server的連接,以便應用程序反復使用這些連接以減少性能損耗。

重置連接的sys.sp_reset_connection
連接是有上下文的,比如說當前連接有未提交的事務,存在可用的游標,存在對應的臨時表。因此為了便于連接重復使用,使得下一個連接不會收到上一個連接的影響,SQL Server通過sys.sp_reset_connection來清除當前連接的上下文,以便另一個連接繼續使用。

當在Ado.net中調用了Connection.Close()時,會觸發sys.sp_reset_connection。這個系統存儲過程大概會做如下事情:
關閉游標
清除臨時對象,比如臨時表
釋放鎖
重置Set選項
重置統計信息
回滾未提交的事務
切換到連接的默認數據庫
重置Trace Flag
此外,根據BOL上的信息:
復制代碼 代碼如下:

"The sp_reset_connection stored procedure is used by SQL
Server to support remote stored procedure calls in a transaction. This stored
procedure also causes Audit Login and Audit Logout events to fire when a
connection is reused from a connection pool."

可以知道不能顯式的在SQL Server中調用sys.sp_reset_connection,此外,這個方法還會觸發Audit Login和Audit Logout事件。

一個簡單的示例
下面我們通過一個簡單的示例來看連接池的使用:
首先我分別使用四個連接,其中第一個和第二個連接之間有10秒的等待時間:
復制代碼 代碼如下:

String ConnectionString = "data source=.\\sql2012;database=AdventureWorks;uid=sa;pwd=sasasa";
SqlConnection cn1=new SqlConnection(ConnectionString);
SqlCommand cmd1=cn1.CreateCommand();
cmd1.CommandText="SELECT * FROM dbo.ABCD";
cn1.Open();
cmd1.ExecuteReader();
cn1.Close();
Response.Write("連接關閉時間:"+DateTime.Now.ToLongTimeString()+"br />");
System.Threading.Thread.Sleep(10000);
SqlConnection cn2=new SqlConnection(ConnectionString);
SqlCommand cmd2=cn2.CreateCommand();
cmd2.CommandText="SELECT * FROM dbo.ABCD";
cn2.Open();
cmd2.ExecuteReader();
cn2.Close();
Response.Write("連接關閉時間:"+DateTime.Now.ToLongTimeString()+"br />");
SqlConnection cn3=new SqlConnection(ConnectionString);
SqlCommand cmd3=cn3.CreateCommand();
cmd3.CommandText="SELECT * FROM dbo.ABCD";
cn3.Open();
cmd3.ExecuteReader();
cn3.Close();
Response.Write("連接關閉時間:"+DateTime.Now.ToLongTimeString()+"br />");
System.Threading.Thread.Sleep(1500);
SqlConnection cn4=new SqlConnection(ConnectionString);
SqlCommand cmd4=cn4.CreateCommand();
cmd4.CommandText="SELECT * FROM dbo.ABCD";
cn4.Open();
cmd4.ExecuteReader();
cn4.Close();
Response.Write("連接關閉時間:"+DateTime.Now.ToLongTimeString()+"br />");

下面我們通過Profile截圖:
    
我們首先可以看到,每一次Close()方法都會觸發exec sp_reset_connection
此外,我們在中間等待的10秒還可以看到SP51是不斷的,剩下幾個連接全部用的是SPID51這個連接,雖然Ado.net Close了好幾次,但實際上物理連接是沒有中斷的。
因此可以看出,連接池大大的提升了效率。

標簽:黃山 中衛 新余 宜春 濟寧 貸款群呼 金昌 河源

巨人網絡通訊聲明:本文標題《ADO.NET數據連接池剖析》,本文關鍵詞  ADO.NET,數據,連接,池,剖析,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ADO.NET數據連接池剖析》相關的同類信息!
  • 本頁收集關于ADO.NET數據連接池剖析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 放荡小婬妇H肉辣文糙汉军婚视频| 日本护士授乳老人XXXX| 我被老头摸了一晚| 麻豆精品乱码WWW久久密| 巜在丈面前被耍了无删减版| 性生生活二十分钟免费| 91丝袜美腿高跟国产极品老师| 羞羞漫画歪歪漫画H漫画打屁股| 中文字幕制服丝袜| 久久久久精品之久精品48| 伊人网成人| 亚洲综合精品香蕉久久网| 校园禁脔h| 好湿?好紧?太爽了三级| 99精品久久久久久久免费| 免费国产不卡午夜福在线| 黄色特级片| 胖色小黄文| 免费网站安全软件大全| 在线看香蕉吚人在线观看75| 亚洲视频在线一区二区三区| 免费看黄的软件| 小人物的快穿日常| 一级做a爱过程免费播放| 91蜜臀精品国产自偷在线| 欧美疯狂feer性派对| 老汉耸动h文| 美女无遮挡网站| 波多野结衣成人国产在线| 欧洲VI秘?一区二区三区| 欧美激情中文字幕一区二区| 精品一区二区三区四区电影| 越南战争三片第| 久久久久久精品无码午夜| 亚洲深深色噜噜狠狠爱网站,| 攵女乱yin片| 性欧美gay 粗又长| 体育生开房互操| 亚洲欧美日韩国产综合| 美女裸体秘?无遮挡視頻视频网站漫画| 午夜拍拍拍拍拍拍拍拍拍拍拍拍 |