Является ли SqlClient.SqlDataReader управляемым объектом .NET или нет? Почему мы должны вызывать метод Close() для явного закрытия открытого соединения? Разве такой объект не должен автоматически закрывать это? Разве сборщик мусора не должен его очищать в любом случае?
Пожалуйста, помогите мне понять, что является лучшей практикой здесь.
Я видел связанный вопрос здесь и далее иллюстрирует мою проблему с веб-приложением. Проблема в том, что у нас закончились соединения. Подробная ошибка здесь:
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.