日期:2014-05-19  浏览次数:20789 次

[讨论]用C#自己写了一个连接池但是发现有错误
开始时没有错但是,时间一长,就会出一个 "超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小... "错误。

我看了一些连接池的说明,里面都说连接用完后要返回池中,我不知道这个返回池中是什么意思,连接关闭了不是就被“毁掉”了,等着垃圾回收,和来返回之说?

我的做法是先Open出多个连接,放在一个数组中,需要连接时从数组中取一条连接,然后从数组中删掉这条数据,用完后“毁掉”这个连接,如果这个数组中的条目小于指定的值那就去重新new出几个连接并且open,放到数组里。

不知道这么做对不对?反正现在会出上面那个错误!我看了一下好象是连接还没有被回收但是我没次都“Dispose”掉的(显示的调用)

555~~~~大家有没有什么可帮助的

------解决方案--------------------
c#里需要自己写连接池吗,.NET本身就支持连接池的,你可以试试建一个连接,然后DISPOSE掉,你会发现数据库里面那个连接还是一直存在的,需要很长时间才会释放。所以出现你所说的问题可能是因为.NET自身的连接池给用满了,因为你一直不停的NEW,而原来的还没有释放。
------解决方案--------------------
对于.NET应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;确保你的应用程序允许连接池的使用。

你出现的情况应该是你一直再connect,而没有释放