日期:2014-05-18  浏览次数:20452 次

(原创)ADO.NET数据库优化超级技巧之程序池
一宿没睡终于搞清楚了,值得一看,.NET优化重磅炸弹  
  SqlConnection   在被建立且没有被Dispose()释放的情况下(即不为NULL),依旧可以被SqlDataAdapter   ,dataset智能读取.即SqlConnection的状态为Close()或Open()都可以填充dataset。
    请注意,如果数据库当前状态为关闭状态SqlDataAdapter能够自动打开数据库填充dataset并在填充完以后自动关闭。如果数据库当前状态为打开的状态SqlDataAdapter填充完以后并不会为你关闭数据库连接。如果你Open()的数据库连接忘记关闭,就会存在一个孤立连接,与ADO即ASP不同,.NET   垃圾回收器不会为您关闭   SqlConnection   并进行清理。出现这种情况的后果就是网站间断性变慢,再就是给程序池连施加的压力如果过大,导致程序池自动回收,程序池回收网站的session变量也将全部丢失。
    SqlConnection每open()一次数据库就需要建立一个程序池,即使使用Dispose()的连接也不会立即释放,如果你的代码是这样写的:
    Conn.Open();
    DataSet   dataSet   =   new   DataSet();
      new   SqlDataAdapter(sql,Conn).Fill(dataSet);
  Conn.Close();
    Conn.Dispose();
    那么很不幸,你的网站很可能经常罢工。
    Conn.Dispose()会释放SqlConnection但不会立即释放程序池。程序池系统默认的最大连接池为100,如果你试图设定打开超过100的程序池连接数,ADO.NET   会使应用程序的连接请求排队等候,直到有空闲的连接。上述代码你如果连续刷新100次到101次就会出现漫长的等待并提示程序池已达到最大连接数的错误。之后系统会在几分钟之后释放所有的程序池,网站又可以访问了。注意应用程序池的连接数与网站连接数是完全不同的两个概念。前者最大只能是100后者可以是无限大。网站连接数达到几万,每天的访问量达到几十万需要几个甚至一个程序池连接就可以应付。

    上述结论都是亲自测出来的,有兴趣的朋友也可以进行测试
<add   key= "strconn "   value= "server= " ";uid=sa;pwd=;database=db;max   pool   size=5 "/>
上面的配置代码中max   pool   size=5表示设置最大程序池连接数为5
  参考资料http://www.microsoft.com/china/MSDN/library/data/sqlserver/TheNETConnectionPoolLifeguard.mspx?mfr=true

------解决方案--------------------
up
------解决方案--------------------
说了半天哪里说道优化了??
------解决方案--------------------
优化捏?
------解决方案--------------------
那要怎么做呢?学习