gpt4 book ai didi

C#:达到最大池大小的根本原因

转载 作者:行者123 更新时间:2023-11-30 23:16:15 25 4
gpt4 key购买 nike

我们的 WCF 应用程序 出现以下错误。

Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

当我们收到错误消息时,应用程序总共消耗了 24 个连接,我认为 100 是默认的连接池大小。

我们总是关闭SQL 连接 并且我们处理SQLDataReader

我不确定为什么会执行此操作。出现这个错误还有其他什么情况吗?

最佳答案

我有一些建议。

  1. using block 中正确实现所有连接以关闭/处理连接(如您所说,这已经完成)
  2. 检查哪些用户/机器保持打开的连接。运行此查询以识别数据库 ID:

从 sys.sysprocesses 中选择不同的 dbid,DB_NAME(dbid),其中 dbid > 0

然后,使用此查询检查所有打开的连接,替换 dbid:

SELECT dbid, DB_NAME(dbid) as DatabaseName, COUNT(dbid) as ConnectionCount, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid = 1
GROUP BY dbid, loginame
ORDER BY count(dbid) desc

这可以给您一些提示,让您知道是谁打开了过多的连接。

  1. 在连接字符串中实现池以限制连接。在您的应用程序连接字符串中使用它:

Pooling=true;最小池大小=1;最大池大小=5

希望对您有所帮助。

关于C#:达到最大池大小的根本原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42086825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com