【问题标题】:What are some good ways to debug timeouts? (C#)调试超时有哪些好方法? (C#)
【发布时间】:2010-11-27 14:21:08
【问题描述】:

我正在构建一个可以正常运行几个小时的网站,但随后 *.asmx 和 *.ashx 调用开始超时。

例外情况是:“超时已过期。在从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在使用中,并且已达到最大池大小。”

我使用 SubSonic 作为 ORM。

我怀疑问题是基于每隔几分钟运行一次并命中数据库的计划任务。当我查看 SQL Server 2000 的“当前活动”时,我看到有:

  • 100 个处于“睡眠”状态的进程
  • 100 把锁

这100个进程来自应用程序“.Net SqlClient Data Provider”,命令为“AWAITING COMMAND”。

所以我猜这就是问题所在。 .但我该如何解决呢?这听起来像是数据库中的死锁情况吗?只要我

c:\> iisrestart

,一切都很好(一段时间)。

谢谢 - 我从来没有遇到过这样的事情,也不确定最好的方法。

迈克尔

【问题讨论】:

    标签: c# .net sql-server subsonic timeout


    【解决方案1】:

    这可能是这个问题的重复 - Is connection pooling working correctly in Subsonic?

    如果您使用 Load() 而不是 LoadAndCloseReader() 加载对象,则每个连接都将保持打开状态,最终您将耗尽连接池。

    【讨论】:

    • 谢谢,48klocs -- 我调用了 .FetchByParameter(),它生成了一个我没有关闭的阅读器。现在该阅读器处于“使用”块中,它更加稳定。但是,我仍然稳定在 2 个打开的连接上,但我并不完全理解。比 100 多个连接要好得多,但我仍在努力解决。
    【解决方案2】:

    当您在集合上调用 Load() 时,它将使 Reader 保持打开状态 - 如果您希望 Reader 关闭,请确保调用 LoadAndCloseReader() - 或使用 using 块。

    拥有一些源代码也会有所帮助。

    【讨论】:

      【解决方案3】:

      我对 Subsonic 一无所知,但也许您正在泄漏数据库“上下文”?完成后,我会检查是否正在释放任何数据库资源...

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2011-08-25
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        相关资源
        最近更新 更多