国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 幫助中心 > 正文

.NET連接池的問題詳解

2024-07-09 22:42:11
字體:
供稿:網(wǎng)友

NET 連接池救生員

防止可淹沒應用程序的池溢出

William Vaughn

大多數(shù) ADO.NET 數(shù)據(jù)提供程序使用連接池,以提高圍繞 Microsoft 斷開連接的 .NET 結(jié)構(gòu)構(gòu)建的應用程序的性能。應用程序首先打開一個連接(或從連接池獲得一個連接句柄),接著運行一個或多個查詢,然后處理行集,最后將連接釋放回連接池。如果沒有連接池,這些應用程序?qū)⒒ㄙM許多額外時間來打開和關(guān)閉連接。

當您使用 ADO.NET 連接池來管理基于 Web 的應用程序和客戶端/服務器 Web 服務應用程序的連接時,您的客戶通常會獲得更快的連接和更好的總體性能。但是,當您的應用程序或 Web 站點上突然涌入了同時希望進行連接的大量客戶時,會發(fā)生什么事情呢?您的應用程序會“沉沒”,還是會“游泳”?就像救生員一樣,您需要仔細監(jiān)視連接池,以維護它的良好性能,并防止連接池發(fā)生溢出。我們首先探討連接池可能溢出的原因,然后討論如何編寫代碼或使用 Windows 性能監(jiān)視器來監(jiān)視連接池。

正如我于 2003 年 5 月發(fā)表的 “Swimming in the .NET Connection Pool” (InstantDoc ID 38356) 一文中討論的那樣,當您使用連接池時,您需要知道許多有關(guān)可伸縮性和性能的詳細信息。請記住,您需要監(jiān)視和管理兩個基本因素:每個池管理的連接數(shù)和連接池的數(shù)量。在一個有效的生產(chǎn)系統(tǒng)中,池的數(shù)量通常很少(1 到 10),而且,使用中的連接的總數(shù)也很少(少于 12 )有效的查詢只用不到一秒鐘的時間就可以完成,并斷開連接。因此,即使有數(shù)百個客戶同時訪問您的 Web 站點,相對較少的幾個連接常常足以處理整個負載。為了使您的應用程序有效地運行,您必須使連接資源處于自己的控制之下,并要監(jiān)視池的狀態(tài),這樣,在監(jiān)視池發(fā)生溢出以及您的客戶開始抱怨(或離開您的網(wǎng)站)之前您會收到某種警告。

為什么會發(fā)生連接池溢出?

GPS平臺、網(wǎng)站建設、軟件開發(fā)、系統(tǒng)運維,找森大網(wǎng)絡科技!

參加電子郵件討論組的人常常抱怨應用程序是如何在測試中是“龍”而在形成為產(chǎn)品時就變成了“蟲”的。有時,他們會報告說,當連接了大約 100 個客戶端時,應用程序會停止或掛起。請記住,一個池中的默認連接數(shù)是 100。如果您嘗試從池中打開 100 個以上的連接,ADO.NET 會使應用程序的連接請求排隊等候,直到有空閑的連接。應用程序(及其用戶)將這種情況視為進入 Web 頁的延遲或視為應用程序死鎖。讓我們首先討論一下這個問題是如何產(chǎn)生的。

在 ADO.NET 中,SqlClient .NET 數(shù)據(jù)提供程序為您提供了兩種打開和管理連接的方法。首先,當您需要手工管理連接時,可以使用 DataReader 對象。利用這種方法,您的代碼將構(gòu)造一個 SqlConnection 對象,設置 ConnectionString 屬性,然后使用 Open 方法來打開連接。當代碼完成 DataReader 后,您要在 SqlConnection 對象停止作用之前關(guān)閉 SqlConnection。要處理行集,您可以將 DataReader 傳遞到應用程序中的另一個例程,但仍然需要確保 DataReader 及其連接處于關(guān)閉狀態(tài)。如果您不關(guān)閉 SqlConnection,代碼會“泄漏”每個操作的連接,于是連接池對連接進行累積,最后便發(fā)生溢出。與 ADO 和 Visual Basic (VB) 6.0 中的情況不同,.NET 垃圾回收器不會為您關(guān)閉 SqlConnection 并進行清理。我稍后要討論的 清單 1 顯示了如何打開連接和生成 DataReader 以從一個簡單的查詢返回行集,來向連接池施加壓力的。

您也可能在使用 DataAdapter 對象時遇到問題。DataAdapter Fill 和 Update 方法可自動打開 DataAdapter 對象的連接,并在數(shù)據(jù) I/O 操作完成后關(guān)閉該連接。不過,如果該連接在執(zhí)行 Fill 或 Update 方法時已經(jīng)處于打開狀態(tài),那么,ADO.NET 在方法執(zhí)行完以后不會關(guān)閉 SqlConnection。這是另一個發(fā)生連接“泄漏”的機會。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丁青县| 剑河县| 新晃| 永清县| 札达县| 南木林县| 伊川县| 延吉市| 左贡县| 庆云县| 陵水| 集安市| 张家川| 普兰县| 江西省| 西藏| 漳浦县| 新野县| 灵璧县| 朔州市| 巴楚县| 德清县| 阳高县| 亳州市| 红安县| 庆元县| 阳春市| 桂林市| 习水县| 株洲市| 京山县| 五大连池市| 洪江市| 崇州市| 宁都县| 湘潭县| 柘城县| 安丘市| 新野县| 台安县| 青浦区|