Ste*_*fan 1 sql-server connection-pooling sqlconnection
我有一个最多由 10 个客户端调用的 Web 服务。该网络服务由 7 个不同的 asmx 页面组成,每个页面大约有 100-200 个功能。
所有这些功能都适用于 MSSQL2005 或 MS SQL2000 数据库。一天中的某些时段,来自客户端的流量很大,似乎我的 sql 服务器上的连接耗尽,导致所有客户端停止。
在每个函数中,我打开一个连接,执行一些操作,然后关闭连接,有时有事务,有时没有。
在服务器上,我看到它创建了很多连接,我不知道为什么它们没有消失,但即使在功能完成后仍然保留在那里。所以我可以看到我的 10 个客户端不时创建超过 80 个连接。有时它们中的一些会消失,有时它们在使用数小时后仍然存在。那里正在进行某种汇集吗?
问题 1:是否有另一种方式来处理我应该使用的连接,例如每个 Web 服务全局一个连接或任何其他方式?
问题 2:如果可以处理每个函数的连接,那么为什么它不关闭服务器上的连接,使打开的连接列表一直变得越来越大,直到我摆脱连接错误?
这个问题与我的另一个问题相关但不相同:Strange SQL2005 Problem。“SqlConnection不支持并行事务”
我现在已将其范围缩小到“连接中断”错误。
我同意有关重构的评论,但这不是这里的相关问题。
您绝对应该在每个函数中使用连接,听起来您没有正确处理它们。假设数据库操作包含在您正在调用的函数中,您的代码应如下所示:
using (SqlConnection connection = <connection code>)
{
using (SqlCommand command = <command code>)
{
// Execute.
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器端,连接将保持打开状态。默认情况下,SqlConnection 类启用连接池,因此您将看到服务器端打开的连接。
这种行为是正常的,应该是可以预料到的。
归档时间: |
|
查看次数: |
4410 次 |
最近记录: |