连接到Sql Server 2008的连接太多

我在C#Framework 4.0中有一个应用程序。 像许多应用程序这个连接到数据库来获取信息。 在我的情况下,这个数据库是SqlServer 2008 Express。

数据库在我的机器上

在我的数据层,我正在使用企业库5.0

当我在本地机器上发布我的应用程序时(App Pool Classic)

  • Windows专业版

  • IIS 7.5

应用程序工作正常。 我正在使用这个查询来检查我的应用程序在testing时创build的连接数量。

SELECT db_name(dbid) as DatabaseName, count(dbid) as NoOfConnections, loginame as LoginName FROM sys.sysprocesses WHERE dbid > 0 AND db_name(dbid) = 'MyDataBase' GROUP BY dbid, loginame 

当我开始testing连接的数量开始增长,但在某个时候,连接的最大数量是26.我认为没关系,因为应用程序工作

当我发布的应用程序TestMachine1

•XP模式虚拟机(Windows XP Professional)

?IIS 5.1

它工作正常,行为是一样的,到数据库的连接数增加到24或26,之后,他们停留在这一点上,不pipe我在应用程序中做什么。

问题:

当我发布到TestMachine2(App Pool Classic)

•Windows Server 2008 R2

?IIS 7.5

我开始testing应用程序连接到数据库的数量开始增长,但这次他们增长非常迅速,不停止增长在24或26,连接的数量增长,直到获得100和应用程序停止工作在那时候。

我已经检查出版物上的任何差异,特别是在Windows专业版和Windows服务器,他们似乎具有相同的参数和configuration。

任何线索为什么会发生这种情况? , 有什么build议么?

听起来就像你需要查看你的代码,找出连接打开和closures的地方。

我同意其他答案,这听起来像你没有在某处放置一个连接(或命令或其他一次性资源)。
使用分析器是一个好主意。
仔细查看代码,寻找可能未处理的资源可以工作。 (经过三次评估,它为我们工作)。
当你正在testing,我会build议将pooling = false添加到您的连接string。 这样,当您的应用程序closures连接时,它将实际closures,而不是根据池化algorithm来决定。

使用内存分析器frunnning在服务器的repro上找出不要处置的连接对象在哪里生成。 修复代码。 重点。我有一个更大的场景(8000分钟以内)。 帮助过我。

我现在使用http://memprofiler.com/广泛 – 可能是最好的memroy profilder和唯一一个我知道用unit testing的API;)