zoukankan      html  css  js  c++  java
  • 抓虫系列(三) 不要轻视web程序中常用的三个"池" 之数据库连接池

    前篇回顾:应用程序池在项目中引发的问题不多,不过如果遇到了没有经历过的话可能会比较茫然,呵呵。当然重点还是数据库连接池与线程池了。

    本篇虫子就结合demo程序给大家演示下数据库连接池会给大家的程序带来什么样的影响。

    private string mConnectionString = "server=127.0.0.1;uid=chongzi;pwd=123456;database=AntiXSS;Connection Reset=FALSE;Max Pool Size=15"
    

    连接字符串中设定池化,池的最大数目为15

       [Serializable]
        public class DAL : IDisposable
        {
            public DAL()
            {          
                    DbHelper dh = new DbHelper();
                    DataSet ds = dh.excSqlRetDataSet("select getdate()");
                    Console.WriteLine(ds.Tables[0].Rows[0][0].ToString());         
            }
    
            public void Dispose()
            {
    
            }
        }
    
     public DataSet excSqlRetDataSet(string sqlString)
            {
                DataSet ds = null;
                if (sqlString.Length == 0)
                {
                    return ds;
                }
                for (int i = 0; i < 20; i++)
                {
                    SqlConnection conn = new SqlConnection(mConnectionString);
                    ds = new DataSet();
                    string sqlCommand = sqlString;
                    SqlDataAdapter da = new SqlDataAdapter(sqlCommand, conn);
                    da.Fill(ds);
                    //注意了 我这里没有关闭链接
                    //conn.Close();
                }
                return ds;
            }
    

    初始数据库连接数1

    启动控制台应用程序

     开启3个进程

     4个!!! 很好 至于为什么不是61个 虫子先卖个关子留到下面再说

    那么 我们换成pooling=false看看

    private string mConnectionString = "server=127.0.0.1;uid=chongzi;pwd=123456;database=AntiXSS;Connection Reset=FALSE;Pooling=FALSE";
    

     初始是1个

    我们同样开3个进程

    看结果

     1个~ ~

    Conn这个链接对象我一直没有手动释放它。

    对于这种现象我的解释是:

    ADO.NET不依赖于ole db提供程序,而是使用.net托管提供的程序,可以断开connection而保留当前数据集可用,也就是非连接的方式。通常我们的程序默认是池化的,据库连接池中可能存在着多个没有被使用的连接一直连接着数据库。

    总结一下:

    池化,提高性能,但是同时会提高连接数。至于连接是否活动带来的影响未作分析。

    非池化,性能一般,但是连接每次都是自动释放。

    而且现在大家的应用程序当中,很多都是配置了池化但是实现了非池化。

    回到上面的那个问题,为什么没有出现61个。

    我们来修改下代码

     

     public DataSet excSqlRetDataSet(string sqlString)
            {
                DataSet ds = null;
                if (sqlString.Length == 0)
                {
                    return ds;
                }
                for (int i = 0; i < 20; i++)
                {
                    SqlConnection conn = new SqlConnection(mConnectionString);
                    conn.Open();
                    //ds = new DataSet();
                    //string sqlCommand = sqlString;
                    //SqlDataAdapter da = new SqlDataAdapter(sqlCommand, conn);
                    //da.Fill(ds);
                    //注意了 我这里没有释放链接
                    //conn.Close();
                }
                return ds;
            }
    

     

     

    改哪里 自己找吧 虫子就不多说了 嘿嘿看效果图 初始化就不接了 同样3个进程

     看到这里不需要虫子解释 你们也应该都懂了 .net如此为大家着想 是好事还是坏事 各自评定了。

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/dubing/p/2218938.html
Copyright © 2011-2022 走看看