如何證明 ADO.NET 預設有使用 Connection Pooling 的機制

使用 Connection Pooling 的機制,可以加快我們存取資料庫的速度。

預設 ADO.NET 是開啟 Connection Pooling 的,那要如何證明呢?

筆者用一個小程式,取得 InnerConnection 來做比較,在有開啟 Connection Pooling 下,因兩個物件相同,故會得到 True。

如下圖:

image

若將連線字串改為 @"Data Source=.\SQLExpress;Integrated Security=True;Pooling=False"; 執行結果為 False(代表沒有使用 Connection Pooling 的機制)

 

程式碼如下:

using System;
using System.Reflection;
using System.Data.SqlClient;

namespace InnerConnectionDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 若將連線字串改為 @"Data Source=.\SQLExpress;Integrated Security=True;Pooling=False"; 執行結果為 False
            string strConn = @"Data Source=.\SQLExpress;Integrated Security=True;";
            PropertyInfo propInnerConn;
            propInnerConn = typeof(SqlConnection).GetProperty("InnerConnection", BindingFlags.NonPublic | BindingFlags.Instance);

            object objInnerConn1, objInnerConn2;

            using (SqlConnection cn = new SqlConnection(strConn))
            {
                cn.Open();
                objInnerConn1 = propInnerConn.GetValue(cn, null);
            }

            using (SqlConnection cn = new SqlConnection(strConn))
            {
                cn.Open();
                objInnerConn2 = propInnerConn.GetValue(cn, null);
            }

            Console.WriteLine("objInnerConn1 與 objInnerConn2 是否相同?  {0}", objInnerConn1 == objInnerConn2);
        }
    }
}

 

筆者使用的環境為 Vista x64 w/SP1 + VSTS 2008 w/SP1 + SQL 2005 Express w/SP2.