| 前篇回顧:應用程序池在項目中引發(fā)的問題不多,不過如果遇到了沒有經(jīng)歷過的話可能會比較茫然,呵呵。當然重點還是數(shù)據(jù)庫連接池與線程池了。 本篇蟲子就結(jié)合demo程序給大家演示下數(shù)據(jù)庫連接池會給大家的程序帶來什么樣的影響。 
| privatestringmConnectionString = "server=127.0.0.1;uid=chongzi;pwd=123456;database=AntiXSS;Connection Reset=FALSE;Max Pool Size=15"
 | 
 連接字符串中設(shè)定池化,池的最大數(shù)目為15 
|   [Serializable]
    publicclassDAL : IDisposable
    {
        publicDAL()
        {          
                DbHelper dh = newDbHelper();
                DataSet ds = dh.excSqlRetDataSet("select getdate()");
                Console.WriteLine(ds.Tables[0].Rows[0][0].ToString());         
        }
        publicvoidDispose()
        {
        }
    }
 publicDataSet excSqlRetDataSet(stringsqlString)
        {
            DataSet ds = null;
            if(sqlString.Length == 0)
            {
                returnds;
            }
            for(inti = 0; i < 20; i++)
            {
                SqlConnection conn = newSqlConnection(mConnectionString);
                ds = newDataSet();
                stringsqlCommand = sqlString;
                SqlDataAdapter da = newSqlDataAdapter(sqlCommand, conn);
                da.Fill(ds);
                //注意了 我這里沒有關(guān)閉鏈接
                //conn.Close();
            }
            returnds;
        }
 | 
 
 初始數(shù)據(jù)庫連接數(shù)1 啟動控制臺應用程序 
  開啟3個進程 
  4個!?。?很好 至于為什么不是61個 蟲子先賣個關(guān)子留到下面再說 那么 我們換成pooling=false看看 
| privatestringmConnectionString = "server=127.0.0.1;uid=chongzi;pwd=123456;database=AntiXSS;Connection Reset=FALSE;Pooling=FALSE";
 | 
 
  初始是1個 我們同樣開3個進程 
 看結(jié)果   
  1個~ ~ Conn這個鏈接對象我一直沒有手動釋放它。 對于這種現(xiàn)象我的解釋是: ADO.NET不依賴于ole db提供程序,而是使用.net托管提供的程序,可以斷開connection而保留當前數(shù)據(jù)集可用,也就是非連接的方式。通常我們的程序默認是池化的,據(jù)庫連接池中可能存在著多個沒有被使用的連接一直連接著數(shù)據(jù)庫。 總結(jié)一下:   池化,提高性能,但是同時會提高連接數(shù)。至于連接是否活動帶來的影響未作分析。 非池化,性能一般,但是連接每次都是自動釋放。 而且現(xiàn)在大家的應用程序當中,很多都是配置了池化但是實現(xiàn)了非池化。 回到上面的那個問題,為什么沒有出現(xiàn)61個。 我們來修改下代碼   
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | publicDataSet excSqlRetDataSet(stringsqlString)
        {
            DataSet ds = null;
            if(sqlString.Length == 0)
            {
                returnds;
            }
            for(inti = 0; i < 20; i++)
            {
                SqlConnection conn = newSqlConnection(mConnectionString);
                conn.Open();
                //ds = new DataSet();
                //string sqlCommand = sqlString;
                //SqlDataAdapter da = new SqlDataAdapter(sqlCommand, conn);
                //da.Fill(ds);
                //注意了 我這里沒有釋放鏈接
                //conn.Close();
            }
            returnds;
        }
 | 
       改哪里 自己找吧 蟲子就不多說了 嘿嘿看效果圖 初始化就不接了 同樣3個進程 
  看到這里不需要蟲子解釋 你們也應該都懂了 .net如此為大家著想 是好事還是壞事 各自評定了。 |