连接池明确时间......我真的不知道该怎么称呼它:)

时间:2012-02-28 16:58:50

标签: c# sql-server-2008 database-connection

我有一个通过using子句连接到DB的客户端应用程序。

  using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
  {
      sqlConn.Open();
      //SQLcommand codes
  }

我知道这将确保调用sqlConnn.Close()和sqlConn.Dispose()。但是,对于运行此代码后的每个客户端,我仍然看到SQLServer处于休眠模式的一些SPID,例如:

60 0睡觉sa AVENGER 0 Xmark AWAITING COMMAND 0 61 0睡觉AVENGER 0 Xmark AWAITING COMMAND 0 62 0睡觉AVENGER 0 Xmark AWAITING COMMAND 0

我知道这是因为我在连接中使用了连接池,这就是为什么它们处于睡眠模式并在进一步的命令中再次使用。如果我不对它们做任何事情,我会看到这些过程会随着时间推移而被刷新(大约10分钟左右)。

我的问题是:是否有来自C#或SQLServer2008的设置会将此时间缩短为2分钟左右?

我面临的问题是,如果我有很多客户端在很短的时间内连接到数据库,我的最大池连接限制会很快达到。我意识到我可以通过增加连接池来解决这个问题,但是我认为这就像是从一个较小的碗升级到一个更大的碗来容纳泄漏屋顶的水。

我在MSDN上搜索并遇到ClearPool(),它会让我隐含地从池中删除SPID,但我认为这会破坏连接池的目的而且它并不是真的很干净。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如您所知,即使您调用sqlconn.Close(),Sql server也可能无法关闭连接,并且对于使用相同连接字符串连接的任何其他客户端将使用相同的连接。

理想情况下,您应该使用必须充当帮助程序类的数据访问层类来创建和管理连接,而不是希望减少这一时间。

使用这种方法可以避免汇集问题,我已经看到这种方法在良好的应用程序架构中使用。

您应该将代码修改为此方法。

答案 1 :(得分:0)

您正在寻找'空闲超时'设置。它是为IIS中的应用程序池配置的。请参阅此link