C# 为什么将我们的.NET/SQL Server网站移动到新主机会导致超过连接池大小?

C# 为什么将我们的.NET/SQL Server网站移动到新主机会导致超过连接池大小?,c#,.net,sql-server,iis,connection-pooling,C#,.net,Sql Server,Iis,Connection Pooling,我们最近将公司网站迁移到了一个新的主机上。 它是一个ASP.NET站点,带有C#代码,连接到MS SQL server 由于将站点移动到新服务器,站点超出了连接池限制(未明确设置,因此我认为默认大小为100)。 通过SQL Server Management Studior检查打开的进程发现,每个数据库调用似乎都保持打开状态,事实上,在代码中我根本找不到显式关闭的连接 数据库连接按以下方式进行: DSLibrary.DataProviders.SqlProvider db = new DSLib

我们最近将公司网站迁移到了一个新的主机上。 它是一个ASP.NET站点,带有C#代码,连接到MS SQL server

由于将站点移动到新服务器,站点超出了连接池限制(未明确设置,因此我认为默认大小为100)。 通过SQL Server Management Studior检查打开的进程发现,每个数据库调用似乎都保持打开状态,事实上,在代码中我根本找不到显式关闭的连接

数据库连接按以下方式进行:

DSLibrary.DataProviders.SqlProvider db = new DSLibrary.DataProviders.SqlProvider(Defaults.ConnStr);
关于这个DSLibrary的文档很少,我假设它是由网站的原始开发人员编写的库。DSLibrary的任何类成员似乎都没有显式关闭连接,也没有在
块中使用
来定义它们以自动关闭连接

我的问题有两个方面

  • 我们怎么会没有遇到呢 此问题发生在站点处于运行状态时 近三年的不同主持人? 有自动关闭的方法吗 未使用的连接,我没有 是否在SQL server上实现
  • 我最好每天重写一次吗 连接和程序 显式打开和关闭 连接数据库
  • 更新
    最大并发连接数
    属性(服务器属性->连接选项卡)设置为0

    如果我在开发机器上以调试模式运行网站,并远程连接到生产数据库,那么连接似乎会正确关闭。这似乎表明这与IIS的配置方式有关

    更新2
    将应用程序池设置为在30个工作进程停止站点并超过最大连接数后循环使用,但现在限制了某些(会话持久性)功能-最近访问的项目列表会很快重置,并且尝试通过cms编辑任何内容是不可能的,因为一旦进程循环使用,您就会注销

    您是否检查了
    最大并发连接数
    属性(服务器属性->连接选项卡)?

    您的代码很可能正在到处泄漏连接

    我敢打赌,你的旧主机的应用程序池设置为经常循环使用,无论是从内存使用还是从#请求处理点。新主机很可能具有默认循环

    我的建议是首先将应用程序池设置为更频繁地回收。然后修复代码。要么重构DSLibrary(猜测它是本地生成的),要么简单地将它改为使用您建立数据库连接的子句

    更新

    还有一件事,更改会话属性以用作备份存储,这样在应用程序回收时不会丢失所有会话信息。这将为您赢得更多时间。

    从您所说的来看,您似乎没有将数据库包装在using语句中,因此每次都会泄漏连接。除非您显式地处理这些内容,否则系统在处理这些内容时会将其转储—这是使用的目的。必须始终对表示程序外资源的任何内容使用(或确保调用dispose)。文件、数据库连接等。

    我有,设置为0(无限制)。谢谢Chris,这很有帮助。我已经将应用程序池设置为在30个工作进程之后循环使用,这似乎可以防止问题的发生。然而,我现在注意到,正因为如此,我们的“最近查看的项目”只保留那些最近查看的产品,直到流程回收。我理解为什么会发生这种情况,但我还是想知道为什么以前的服务器上没有发生这种情况。此外,是的,我相信DSL图书馆是本土的。所有连接都由该库内部处理,不确定如何使用
    条款添加
    。如果您仍然可以访问其他服务器,请查看应用程序池和站点的IIS属性,看看还有什么不同。您是否在移动中更改了IIS版本?不幸的是,我从未访问过以前服务器上的IIS设置。首先,这是这张便条的理由之一。我不知道以前的IIS版本是什么,所以可能会有变化。看起来,我将比我预期的更迫切地重写连接代码。@ DayOffers:另一件事,如果它的会话相关,您可能会考虑更改会话属性以使用SQL Server而不是In进程。我试图修复代码,显式关闭连接。我有问题,请看我绝对同意这是我需要做的,但事实上,它是在没有代码更改的前一个服务器上工作,这表明有一些(不满意的)解决办法。