*(转)超时时间已到。超时时间已到 可是还没有从池中获取链接。出现这种状况多是由于全部池链接均在使用 而且达到了最大池大小。

这是个老问题了!你就查两点:  
  1、看全部open的链接是否都close了。  
  2、若是访问量很大,加上Max   Pool   Size=512这一句,固然这是要以损失系统性能为代价的!  
  这样之后必定能够解决你的问题!

  解决方案一

我 想缘由多是并发操做。DataReader是独占链接的,就是说你的程序可能设计上有问题。好比说最大链接设100,假设有100我的同时使用 DataReader正在读取数据库内容,那么当第101人读取的时候,链接池中的链接已经没有了,就会出现上面的错误。DataReader是独占链接 的,每一个DataReader都要占用一个链接。固然这个状况是偶尔出现的,因此会很长时间出现一次,由于只有同时有超过链接池最大链接数量的并发操做才 会发生。并且你加大并发数量只能暂时缓解问题,若是你加大到200个并发链接,若是有201 人同时操做怎么办?你说了你使用Connection对象的Close()方法,这是不行的,由于Close()方法仅仅是关闭链接,但这个链接没有释 放,仍是被这个对象占用,要释放必须使用Connection的Dispose()方法显式释放链接才能够,不然这个对象占用的链接只能等到垃圾收集的情 况下才能被释放。这种状况确定会出现“超时时间已到”的错误。

解决方法:
         1 修改几个关键页面或访问比较频繁的数据库访问操做,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
         2 在访问数据库的页面上使用数据缓存,若是页面的数据不是常常更新(几分钟更新一次)的话,使用Cache对象能够不用访问数据库而使用缓存中的内容,那么能够大大减小链接数量。
         3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
         4 建议对数据库操做进行大的修改,创建本身的数据库操做代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现链接数量不够的问题了。

解决方案二

解决方法(*):WEB.config 里面:在数据库链接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一劳永逸。

解决方案三

估计是链接(Connection)对象没有Close。却是没必要Dispose,而DataReader用完后应该关闭,但不关闭也没问题,只是不关闭的话此链接对象就一直不能用,只要你最终关闭了链接对象就不会出问题。   
    
   链接对象在Open后的操做都放在try块中,后面跟一个finally块:conn.Close();数据库

相关文章
相关标签/搜索