首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL多线程:.Net ConnectionPool

SQL多线程:.Net ConnectionPool
EN

Stack Overflow用户
提问于 2008-09-25 01:17:13
回答 4查看 4.2K关注 0票数 1

在VB.Net窗口服务中,我目前正在使用以下工作单元:

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(operation, nextQueueID)  

在每个工作单元(或为了便于理解,我将使用线程)中,它将生成两个MSSQL操作,如下所示:

代码语言:javascript
复制
    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个连接到IDLEESTABLISHED上的SQL server,这对我来说似乎太多了,特别是因为我们有更大的网络应用程序,需要5-10个连接。

连接字符串对于应用程序是全局的(不变),并且还定义了Pooling=true

现在,这些线程是否每个都有自己的ConnectionPool,或者整个.EXE进程是否有一个ConnectionPool

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-25 01:22:01

从MS Docs -

连接按进程、按应用程序域、按连接字符串以及在使用集成安全性时按Windows身份池化

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

您是否遇到错误,例如-

异常详情: System.InvalidOperationException:超时过期。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中,并且已达到最大池大小。

另外,在服务中有多少工作项正在排队?

票数 4
EN

Stack Overflow用户

发布于 2008-09-25 06:55:23

代码的一个大问题是,如果ExecuteNonQuery抛出异常,则不会关闭连接。仅处理SqlCommand是不够的,还需要在抛出异常时处理SqlConnection,如下所示:

代码语言:javascript
复制
Using SqlConnection connection = New SqlConnection(ConnString)
    Using sqlcmd As New SqlCommand("", connection)        
        With sqlcmd            
          ... etc
        End With    
    End Using
End Using
票数 2
EN

Stack Overflow用户

发布于 2009-01-09 21:43:40

尽管我通常喜欢using语句,但我发现有时在.NET库中,句柄的实际关闭直到垃圾回收才会完成。因此,作为一个老派和宗教的人,我在我的using语句的末尾添加了一个明确的结束语。这是pseduo代码,因为我通常用C#而不是VB.NET编写代码,但它应该会给你一些启发。

代码语言:javascript
复制
Using SqlConnection connection = New SqlConnection(ConnString)

   TRY
      Using sqlcmd As New SqlCommand("", connection)
                  With sqlcmd
                        ... etc
          End With
      End Using
   FINALLY
      connection.Close()

End Using
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/130941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档