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

时间:2017-02-07 10:00:06

标签: c# sqlconnection

我们的WCF application已收到以下错误。

  

超时已过期。在获得a之前经过了超时时间   从游泳池连接。这可能是因为所有人都集中了   正在使用连接并达到最大池大小。

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

我们始终关闭SQL connection,我们也处理SQLDataReader

我不确定为什么会发生这种情况。当我们收到此错误时还有其他情况吗?

1 个答案:

答案 0 :(得分:1)

我有一些sugestions。

  1. 正确实施using块内的所有连接以关闭/处置连接(正如您所说,已经完成)
  2. 检查哪些用户/机器保持打开的连接。运行此查询以标识数据库ID:
  3. select distinct dbid, DB_NAME(dbid) FROM sys.sysprocesses where 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. 在连接字符串中实现池以限制连接。 在您的应用程序连接字符串中使用它:
    2. Pooling=true; Min Pool Size=1; Max Pool Size=5

      我希望这可以帮到你。