gpt4 book ai didi

.Net 多线程 : SQL ConnectionPool

转载 作者:行者123 更新时间:2023-12-03 13:15:10 24 4
gpt4 key购买 nike

在 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

运行 netstat -a -o 时在服务器上,我看到大约 50 个与位于 IDLE 上的 SQL 服务器的连接或 ESTABLISHED ,这对我来说似乎太过分了,特别是因为我们有更大的 Web 应用程序,它们需要 5-10 个连接。

连接字符串对应用程序是全局的(不会更改),并且具有 Pooling=true也定义了。

现在这些线程中的每一个都有自己的 ConnectionPool ,或者有没有一个 ConnectionPool对于整个 .EXE 进程?

最佳答案

来自 MS Docs -

“每个进程、每个应用程序域、每个连接字符串以及在使用集成安全性时、每个 Windows 身份时,都将连接池化”

http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

您是否遇到错误,例如 -

异常详细信息:System.InvalidOperationException:超时已过期。超时
从池中获取连接之前耗时。这可能已经发生
因为所有池连接都在使用中,并且达到了最大池大小。

还有多少工作项在服务中排队?

关于.Net 多线程 : SQL ConnectionPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com