亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# 連接池的設置與使用

 更新時間:2021年01月30日 10:20:43   作者:曠野風箏少年  
這篇文章主要介紹了c# 連接池的設置與使用,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下

原由:許多用戶可能在查詢相同的數(shù)據(jù)庫以獲取相同的數(shù)據(jù)。在這些情況下,可以通過使應用程序共享到數(shù)據(jù)源的連接來提高應用程序的性能。否則,讓每個用戶打開和關(guān)閉單獨的連接的開銷會對應用程序性能產(chǎn)生不利影響。這樣就有了連接池。

實現(xiàn):

C#在連接字符串中設置連接池

    如果使用的是 OleDbConnection、OdbcConnection 或 OracleConnection 類,則連接池將由提供程序自動處理,所以您不必自己進行管理。

    如果使用的是 SqlConnection 類,則連接池被隱式管理,但也提供選項允許您自己管理池。

    連接使用Open()方法打開連接,這時候連接池就會初始化并建立設定的最小連接數(shù)。在使用完連接時一定要關(guān)閉連接,以便連接可以返回池。要關(guān)閉連接使用Close()

    當連接數(shù)滿了并且申請連接的時間超過設置連接等待的時間時,使用“異步進程”,對數(shù)據(jù)庫進行異步操作,確保連接能夠及時調(diào)用Close方法關(guān)閉連接,這樣能大大減少正在使用的連接數(shù)。

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

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

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

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

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

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

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

 class DbConn
    {
        //using System.Data;
        //using System.Data.SqlClient;
        private const int MaxPool = 10;         //最大連接數(shù)
        private const int MinPool = 5;          //最小連接數(shù)
        private const bool Asyn_Process = true; //設置異步訪問數(shù)據(jù)庫
        private const bool Mars = true;         //在單個連接上得到和管理多個、僅向前引用和只讀的結(jié)果集(ADO.NET2.0) 
        private const int Conn_Timeout = 15;    //設置連接等待時間
        private const int Conn_Lifetime = 15;   //設置連接的生命周期
        private string ConnString = "";         //連接字符串      
        private SqlConnection SqlDrConn = null;  //連接對象

        public DbConn()//構(gòu)造函數(shù)
        {
            ConnString = GetConnString();
            SqlDrConn = new SqlConnection(ConnString);
        }

        private string GetConnString()
        {
            return "server=localhost;"
                + "integrated security=sspi;"
                + "database=pubs;"
                + "Max Pool Size=" + MaxPool + ";"
                + "Min Pool Size=" + MinPool + ";"
                + "Connect Timeout=" + Conn_Timeout + ";"
                + "Connection Lifetime=" + Conn_Lifetime + ";"
                +"Asynchronous Processing=" + Asyn_Process + ";";
                //+ "MultipleActiveResultSets=" + Mars + ";";
        }
       
        public DataTable GetDataReader(string StrSql)//數(shù)據(jù)查詢
        {                    
            //當連接處于打開狀態(tài)時關(guān)閉,然后再打開,避免有時候數(shù)據(jù)不能及時更新
            if (SqlDrConn.State == ConnectionState.Open)
            {
                SqlDrConn.Close();                
            }
            try
            {
                SqlDrConn.Open();
                SqlCommand SqlCmd = new SqlCommand(StrSql, SqlDrConn);
                SqlDataReader SqlDr = SqlCmd.ExecuteReader();
                if (SqlDr.HasRows)
                {
                    DataTable dt = new DataTable();
                    //讀取SqlDataReader里的內(nèi)容
                    dt.Load(SqlDr);
                    //關(guān)閉對象和連接
                    SqlDr.Close();
                    SqlDrConn.Close();                    
                    return dt;
                }
                return null;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);          
                return null;
            }
            finally
            {        
                SqlDrConn.Close();
            }
        }
    }

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

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

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

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

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

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

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

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

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

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

以上就是c# 連接池的設置與使用的詳細內(nèi)容,更多關(guān)于c# 連接池的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Url相對路徑的問題總結(jié)

    Url相對路徑的問題總結(jié)

    很多時候,我們在圖片或者其他(a標簽,flash)中指定鏈接的時候,我們需要選擇是使用絕對路徑,或者是相對路徑.
    2012-11-11
  • Unity Blend Tree動畫混合樹使用入門教程

    Unity Blend Tree動畫混合樹使用入門教程

    這篇文章主要為大家詳細介紹了Unity Blend Tree動畫混合樹使用入門教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解C# 不能用于文件名的字符

    詳解C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作為文件名,嘗試重命名一個文件,輸入/ 就可以看到windows 提示的不能作為文件名的字符,那么具體是包括哪些符號不能作為文件名呢?下面小編給大家介紹下
    2018-02-02
  • JWT.net 操作實踐方法

    JWT.net 操作實踐方法

    下面小編就為大家分享一篇JWT.net 操作實踐方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • c#之OpenFileDialog解讀(打開文件對話框)

    c#之OpenFileDialog解讀(打開文件對話框)

    這篇文章主要介紹了c#之OpenFileDialog(打開文件對話框),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C#數(shù)字圖象處理之膚色檢測的方法

    C#數(shù)字圖象處理之膚色檢測的方法

    這篇文章主要介紹了C#數(shù)字圖象處理之膚色檢測的方法,可實現(xiàn)針對膚色的檢測功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中判斷字符串是全角還是半角的實現(xiàn)代碼

    C#中判斷字符串是全角還是半角的實現(xiàn)代碼

    本篇文章主要是對C#中判斷字符串是全角還是半角的實現(xiàn)代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • javascript函數(shù)中執(zhí)行c#函數(shù)的方法

    javascript函數(shù)中執(zhí)行c#函數(shù)的方法

    這篇文章主要介紹了javascript和c#函數(shù)和變量互相調(diào)用的方法,大家參考使用吧
    2014-01-01
  • c# 給pdf添加數(shù)字簽名的步驟

    c# 給pdf添加數(shù)字簽名的步驟

    這篇文章主要介紹了c# 給pdf添加數(shù)字簽名的步驟,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • 關(guān)于C#版Nebula客戶端編譯的問題

    關(guān)于C#版Nebula客戶端編譯的問題

    這篇文章主要介紹了C#版Nebula客戶端編譯的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07

最新評論