2012-02-28 94 views
0

我有一个客户端应用程序,通过using子句连接到数据库。连接池清除时间...我真的不知道该怎么称呼它:)

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

我知道这将确保sqlConnn.Close()和sqlConn.Dispose()被调用。然而,运行该代码之后的每个客户端我仍然看到一些SPID上的SQLServer在睡眠模式,例如:

60 0睡眠SA AVENGER 0 Xmark命令等待0 61 0睡眠SA AVENGER 0 Xmark命令等待0 62 0睡觉SA AVENGER 0 Xmark AWAITING命令0

我知道这是因为我在我的连接中使用连接池,这就是为什么它们处于睡眠模式并在再次命令中重新使用。如果我没有对它们做任何事情,我会发现随着时间的推移(如10分钟左右之后),这些过程会被刷新。

我的问题是:是否有从C#或SQLServer2008的设置,将这次减少到2分钟左右?

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

我在MSDN上搜索并遇到了ClearPool(),这将让我隐式地从池中删除SPID,但我认为这打破了连接池的目的,它不是很干净。

任何帮助,非常感谢。

回答

0

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

1

正如你所知道 SQL服务器甚至可能不关闭连接,当你调用sqlconn.Close(),并将使用的任何其他客户使用相同的连接字符串连接相同的连接。

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

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

你应该修改你的代码到这个方法。

+0

+1:如果数据访问层中的类也实现了'IDisposable',所以它也可以封装在'using'块中,这种解决方案的效果更好。 – 2012-02-28 17:46:43

相关问题