我正在构建一个运行良好几个小时的网站,但随后* .asmx和* .ashx调用开始计时。
例外情况是:“超时已过期。从池中获取连接之前已经过了超时时间这可能是因为所有池连接都在使用中并且达到了最大池大小。”
我正在使用SubSonic作为ORM。
我怀疑问题是基于每隔几分钟运行一次的计划任务并点击数据库。当我查看SQL Server 2000的“当前活动”时,我看到有:
100个进程来自应用程序“.Net SqlClient Data Provider”,命令为“AWAITING COMMAND”。
所以我猜这就是问题所在。 。但是我该如何排除故障呢?这听起来像db中的死锁条件吗?我一旦
C:\> iisrestart
,一切都很好(一段时间)。
谢谢 - 我从来没有遇到过这样的事情,也不确定最好的方法。
迈克尔
答案 0 :(得分:6)
这可能是此问题的重复 - Is connection pooling working correctly in Subsonic?
如果您使用Load()而不是LoadAndCloseReader()加载对象,则每个连接都将保持打开状态,最终您将耗尽连接池。
答案 1 :(得分:6)
当您在集合上调用Load()时,它将使Reader保持打开状态 - 如果您希望阅读器关闭,请确保调用LoadAndCloseReader() - 或使用using块。
它也有一些源代码。
答案 2 :(得分:0)
我对Subsonic一无所知,但也许你正在泄漏数据库'上下文'?完成后我会检查是否正在处理任何数据库资源...