繁体   English   中英

如何找到未关闭的连接? 超时已过期。 操作完成之前经过的超时时间或服务器没有响应

[英]How to find unclosed connection? Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding

我以前遇到过这个问题,发现基本上我有一个连接,我没有足够快地关闭(保持连接打开等待垃圾收集不是真正的最佳实践)。

现在我再次得到它,但我似乎无法找到我离开我的连接的地方。 到时候看到数据库清除了旧连接的错误,所以我看不到所有被锁定的连接最后一个命令(上次我有这个问题非常有帮助)。

任何想法我如何设法我的代码或数据库来跟踪发生了什么,所以我可以找到我的违规代码?

您提供的错误并不真正指向一个保持打开的连接; 更有可能的是,查询花费的时间比应用程序预期的要长。 您可以增加等待响应的时间,并且可以使用Sql查找哪些查询最费力。

希望你有一个数据访问层类,而不是一大堆类,每个类都创建自己的连接,对吧? 你用的是什么语言? 如果你使用C#,这个问题的最大原因是DataReaders并将这些对象返回到上层。 很可能某些客户端类没有关闭它从DAL类接收的DataReader,而是为谁知道多长时间打开/锁定连接。 跟踪您要返回的DataReader,并确保您的客户端类正在关闭/处理它们。

我还开始考虑通过实现Disposable模式重新设计数据访问层,并可能返回POCO而不是Data(... Tables,... Sets,... Readers)对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM