SqlClient.SqlDataReader 是否是 .NET 托管对象?为什么我们必须调用 Close() 方法显式关闭打开的连接?这样一个对象的范围不应该自动关闭吗?垃圾收集器不应该清理它吗?
请帮助我了解这里的最佳做法是什么。
我在这里看到了一个相关的问题,它进一步说明了我在使用 Web 应用程序时遇到的问题。问题是我们的连接用完了。详细的错误在这里:
Exception: System.InvalidOperationException
Message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Source: System.Data
at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()
为了解决这个问题,我必须明确关闭所有 SQLDataReader 对象。
我正在使用 .NET Framework 3.5