Является ли 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