C# ADO.net 數據庫連接池


  前一陣開發一套系統,同組的同事提供了一個數據庫連接組件,是他自己封裝的,使用了自定義的連接池,用着很是不爽,而且經常會因為程序不嚴謹的原因,導致連接池里的連接被用完,也導致其他錯誤,因此我想自己研究一下ado.net 的連接池。

  其實很早以前,我就接觸過連接池,只是從來沒有實際使用過,在我的印象里,一個連接池應該是跟SqlConnection,MySqlConnection等差不多,都是實現了IDBConnection 接口,這樣程序在使用的時候,是沒有任何代碼入侵,只是在new 一個connection 的時候,從連接池中獲取,同事的這個連接池實在不符合我的審美。

  但是當我從網上開始搜資料時,卻發現,其實 Ado.net底層已經支持連接池,根本不需要我們自己開發!!!

  在Ado.net 中,連接池的行為可以通過連接字符串來控制,主要包括四個重要的屬性:

  • Connection Timeout:連接請求等待超時時間。默認為15秒,單位為秒。
  • Max Pool Size: 連接池中最大連接數。默認為100。
  • Min Pool Size: 連接池中最小連接數。默認為0。
  • Pooling: 是否啟用連接池。ADO.NET默認是啟用連接池的,因此,你需要手動設置Pooling=false來禁用連接池。

我發現了下面這篇文章:

http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html

另外,因為我們用了Mysql 數據庫,類庫不是微軟提供的,所以我擔心mysql 沒有實現連接池,所以自己測試了一下,結果很明顯,mysql 也同樣支持。

附測試代碼和結果:

 class Program
    {
        static void Main(string[] args)
        {
            MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysql"].ConnectionString);
           

            DateTime startTime = DateTime.Now;
            Console.WriteLine(startTime.ToLongTimeString());

            for (int i = 0; i < 100; i++)
            {
                conn.Open();
                conn.Close();
            }

          

            DateTime endTime = DateTime.Now;
            Console.WriteLine(endTime.ToLongTimeString());
            Console.WriteLine("連接100次,使用時間(ms):"+(endTime-startTime).ToString());

            Console.ReadLine();
        }
    }

配置文件:

啟用連接池:(默認的)

<add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=true;"/>

不啟用連接池:

<add name="mysql" connectionString="server = 192.168.2.101; user id = root; password = password; database = Test; Pooling=false;"/>

每種配置我都運行了三遍:

使用連接池的時候,執行100次時間為0.477秒

不使用連接池的時候,時間是6.56 秒,相差極大。

總之,在Ado.net 里,不需要自己實現連接池,只要設置好參數就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM