【发布时间】:2011-02-16 01:23:22
【问题描述】:
背景:我正在将我的应用程序从 npgsql v1 移动到 npgsql v2.0.9。运行我的应用程序几分钟后,我收到 System.Exception: Timeout while getting a connection from the pool。
网络声称这是由于连接泄漏(打开数据库连接,但没有正确关闭它们)。
所以
我正在尝试诊断 npgsql 中泄漏的 postgres 连接。
来自周围的各种网络文献;诊断泄漏连接的一种方法是在 npgsql 上设置日志记录,并在日志中查找泄漏连接警告消息。问题是,我在任何地方的日志中都没有看到这条消息。
我还发现了监控 npgsql 连接的实用程序,但它不稳定且崩溃。
所以我只能手动检查代码。对于每个创建 npgsql 连接的地方,都有一个 finally 块处理它。对于每个打开数据读取器的地方,都会使用 CommandBehavior.CloseConnection(并且会释放数据读取器)。
还有其他地方可以检查或有人可以推荐一种方法来查找泄漏的池连接吗?
【问题讨论】:
-
我遇到了完全相同的问题。但是我发现只有在使用 DbConnection.BeginTransaction 和 DbTransaction.Commit/Rollback 时才会发生连接泄漏。我确保我也正确关闭/处理所有连接,但没有帮助。我认为这是 Npgsql 本身的问题,而不是我们的代码。如果您找到了解决方案,请告诉我。谢谢。
标签: c# postgresql connection-pooling pooling npgsql