В службе Windows VB.Net я в настоящее время объединяю единицы работы с:
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
Когда я запускаю netstat -a -o
на сервере, я вижу около 50 подключений к SQL-серверу на IDLE
или ESTABLISHED
, мне это кажется чрезмерным, особенно если учесть, что у нас гораздо большие веб-приложения, которые обходятся с 5 -10 подключений.
Строка подключения является глобальной для приложения (не изменяется), и также определена Pooling=true
.
Теперь у каждого из этих потоков будет свой ConnectionPool
, или есть один ConnectionPool
для всего процесса .EXE?