有很多打开的连接vs反复打开和关闭它们

时间:2011-11-03 12:19:05

标签: c# sql-server-2008

我正在调查我们产品中的一些性能问题。我们有几个线程(数十个数量级),每个线程每隔几秒进行一次轮询,每次我们这样做,我们都会打开与DB的连接,查询,然后处理。

所以我想知道,每个线程保持与DB的开放连接会更有效率,所以我们不必每隔2秒就要经历一次连接的开销吗?或者最好坚持使用教科书using块?

3 个答案:

答案 0 :(得分:3)

首先要了解的是Connection pooling。您已经在使用它,不要更改您的代码。

问题变成:我的配置文件中要声明的连接数是多少? 这很容易改变和衡量。

答案 1 :(得分:1)

如上所述,连接池应该处理它,但是如果你在数据库中使用消息或类似的东西来打击每隔几秒检查一次事物的状态那么你可能会填满数据库池很快。如果你在SQL Server上,在查询窗口中对数据库执行SP_WHO2,你会看到很多信息:spid数量(连接打开),阻塞等。

答案 2 :(得分:0)

通常,连接设置和拆卸都很昂贵;在数十个线程中多次这样做可能会造成严重损害;但请注意,您使用的解决方案可能已经为您汇集了连接(即使您不知道它),因此可能没有必要(请参阅您的手册和配置)。

另一方面,如果您决定自己实现某种连接池,请检查您的数据库服务器是否可以处理数十个额外的连接(可能应该这样)。