使用ASP.NET和web服务时最有效地获取SQL连接

使用ASP.NET和web服务时最有效地获取SQL连接,asp.net,performance,web-services,sqlconnection,Asp.net,Performance,Web Services,Sqlconnection,在ASP.NET中使用web服务(我们特别使用asmx和WCF)时,建立SQL连接的最佳方法是什么?现在,我正在为每个web服务调用建立一个新的连接,但我不认为这在有数千用户连接的情况下会太有效。对这个话题的任何见解都将不胜感激 你所做的是相当标准的 假设您使用的是相同的连接字符串,连接将来自连接池,这是获取连接的最有效方法 只有在每次通话时完成所需的工作并关闭连接才是良好的做法 您可以做的一件事是缓存结果,并为在缓存项的生命周期内不大可能导致数据更改的调用返回缓存结果。这将减少数据库调用。让提

在ASP.NET中使用web服务(我们特别使用asmx和WCF)时,建立SQL连接的最佳方法是什么?现在,我正在为每个web服务调用建立一个新的连接,但我不认为这在有数千用户连接的情况下会太有效。对这个话题的任何见解都将不胜感激

你所做的是相当标准的

假设您使用的是相同的连接字符串,连接将来自连接池,这是获取连接的最有效方法

只有在每次通话时完成所需的工作并关闭连接才是良好的做法


您可以做的一件事是缓存结果,并为在缓存项的生命周期内不大可能导致数据更改的调用返回缓存结果。这将减少数据库调用。

让提供商为您处理连接池;不要试图做得更好,你会失败的


使用默认连接设置,提供商将维护一个连接池。当您关闭/释放时,连接实际上刚刚释放到池中。它不一定是真正关闭的。

默认情况下,SqlConnections使用连接池,这将允许系统管理以前连接对象的重复使用,而不是为每个请求真正创建“新”连接,直到池的最大值。而且它是内置的,所以你不需要做任何事情来利用它


编写自己的池/连接管理器充满危险,并导致各种各样的邪恶,因此,在我看来,允许系统从池中管理您的连接可能是您最好的选择。

强烈建议您在使用完连接后始终关闭连接,以便将连接返回到池中。您可以使用Connection对象的Close或Dispose方法,或者通过在C#中打开using语句中的所有连接来完成此操作。未显式关闭的连接可能不会添加或返回到池中


您应该在连接字符串中添加“Pooling=true”(并添加非零的“最小池大小”。

+1这是一个有效的问题。如果你投了反对票,请说明理由。