超时时间已到,但是尚未从池中获取连接

前段时间数据库的时候,出现这个问题。一般是读到20多万条的时候。会出现这个问题。

  找了一下。主要是这两个问题:

  一、看所有open的连接是否都close了。

  二、如果访问量很大,加上Max Pool Size=512这一句,当然这是要以损失系统性能为代价的!

  我查了一下。数据库连接所有的open都关闭了。 max pool size也确实加上了。但是。问题依旧。。

  哦,还有的说在数据库连接字串中添加Connect Timeout=500,也就是设置连接超时更长一些。问题依旧。。

  后来看到一篇文章中说:

  DataReader是独占连接 的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才 会发生。而且你加大并发数量只能暂时缓解问题。

  文中建议用使用dataset来读取。然后我就把读取数据中使用DataReader的地方全部用DataAdapter和DataSet来获取数据库数据,因为DataSet非独占。会将数据保存在内存中,一次连接后释放,问题解决。

  记录一下。

comments powered by Disqus