.NET中的连接池

3
Imports System.Data.SqlClient

Module Module1

    Sub Main()
        Dim iCount As Integer = 1
        Try
            Do
                Dim sqlConn As New  _
                SqlConnection("Data Source=localhost;trusted_Connection=yes;initial catalog = MyDatabase;max pool size =100;")
                sqlConn.Open()
                Trace.WriteLine("opening connection " & CStr(iCount))
                'sqlConn.Close()
                'Trace.WriteLine("closing connection " & CStr(iCount))
                'sqlConn.Dispose()
                'Trace.WriteLine("disposing connection " & CStr(iCount))
                iCount = iCount + 1
            Loop Until iCount > 20000
        Catch ex As Exception
            Trace.WriteLine(ex.ToString)
        End Try
    End Sub

End Module

如果我执行这段代码,这个测试应用程序在抛出“超时时间到达,未能从池中获得连接”的异常之前会打开115个与数据库的连接。但是应用程序池中只有100个连接。这是怎么可能的?

呵呵,你说得对!我把它们添加到List中,在第100个连接后出现了异常。不确定为什么我之前没看到它 :)。你能把你的评论复制粘贴成答案吗?我会接受它。 - Egor4eg
我有同样的疑问,想知道你是如何解决的...这很紧急吗?@Egor4eg - Akhil K Nambiar
@AkhilKNambiar:问题在于使用的连接没有被释放。 - Egor4eg
这是否意味着我们必须使用sqlConn.close()? - Akhil K Nambiar
@AkhilKNambiar:你可以使用sqlConn.close()。但更好的决定是使用'using'块。 - Egor4eg
1个回答

3

猜测:由于您没有持有打开连接对象的引用,因此前15个可能会被处理并重新使用?如果将这些连接推入List<>中,是否仍然会获得115个连接?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接