在 VB.Net Windows 服务中,我目前正在使用以下工作单元:
ThreadPool.QueueUserWorkItem(operation, nextQueueID)
在每个工作单元(或为了便于理解我将使用的线程)中,它将进行几个 MSSQL 操作,如下所示:
Using sqlcmd As New SqlCommand("", New SqlConnection(ConnString))
With sqlcmd
.CommandType = CommandType.Text
.CommandText = "UPDATE [some table]"
.Parameters.Add("@ID", SqlDbType.Int).Value = msgID
.Connection.Open()
.ExecuteNonQuery()
.Connection.Close() 'Found connections not closed quick enough'
End With
End Using
在服务器上运行 anetstat -a -o
时,我看到大约有 50 个与 SQL 服务器的连接位于IDLE
or上ESTABLISHED
,这对我来说似乎太过分了,特别是因为我们有更大的 Web 应用程序,可以通过 5-10 个连接来解决问题。
连接字符串对应用程序是全局的(不会更改),并且也已Pooling=true
定义。
ConnectionPool
现在这些线程中的每一个都有自己的ConnectionPool
.EXE 进程吗?