那么我们换成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如此为大家着想,是好事还是坏事,各自评定了。
相关链接: