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

C# C:达到最大池大小的根本原因,c#,sqlconnection,C#,Sqlconnection,我们的WCF应用程序中出现以下错误 超时已过期。获取数据之前经过的超时时间 来自池的连接。发生这种情况的原因可能是所有的 连接正在使用,已达到最大池大小 当我们收到错误时,应用程序总共使用了24个连接,我认为100是默认的连接池大小 我们总是关闭SQL连接,并处理SQLDataReader 我不知道为什么会发生这样的处决。当我们遇到这个错误时,还有其他情况吗?我有一些建议 使用块正确实现内部的所有连接以关闭/处置连接正如您所说,这已经完成 检查哪些用户/计算机保持打开的连接。运行此查询以标识数据

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

超时已过期。获取数据之前经过的超时时间 来自池的连接。发生这种情况的原因可能是所有的 连接正在使用,已达到最大池大小

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

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


我不知道为什么会发生这样的处决。当我们遇到这个错误时,还有其他情况吗?

我有一些建议

使用块正确实现内部的所有连接以关闭/处置连接正如您所说,这已经完成 检查哪些用户/计算机保持打开的连接。运行此查询以标识数据库id: 从sys.sysprocesss中选择distinct dbid,DB_NAMEdbid,其中dbid>0

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

这会给你一些提示,告诉你是谁打开了太多的连接

在连接字符串中实现池以限制连接。 在应用程序连接字符串中使用此选项: 池=真;最小池大小=1;最大池大小=5


我希望这能对您有所帮助。

所有一次性对象都应该被处理掉,不仅仅是SqlDataReader,最重要的是SqlConnection。围绕这类对象使用using语句,以正确处理them@Steve-是的,我们使用using语句来处理连接和SQL命令等。我认为您需要对您的服务进行更多调查,看看您是否遗漏了.Dispose方法或代码中的using语句。有时,可能是一个小循环导致了问题。我们需要更多关于您的场景的信息:您是否使用连接池?您使用的是哪个.NET Framework版本?@RicardoPontual-我认为如果连接字符串相同,SQL池将自动处理。我们使用的是.NETFramework4。
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