SqlDataReader: В этом случае читатель закроется?
-
05-07-2019 - |
Вопрос
Я очищаю DataReaders в старом проекте .NET 1.1, который я унаследовал. Р>
Предыдущий разработчик закодировал уровень доступа к данным таким образом, что большинство методов DAL возвращали SqlDataReaders (таким образом, вызывающему процессу оставалось только правильно вызывать методы .Close () или .Dispose ()). Р>
Однако я столкнулся с ситуацией, когда вызывающая сторона не перехватывает возвращенный SqlDataReader (и, следовательно, неправильно его утилизирует). Смотрите код ниже:
Метод доступа к данным:
Public Shared Function UpdateData() As SqlDataReader
...
drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)
Return drSQL
End Function
Телефонный код:
...
DataAccessLayer.UpdateData()
...
Как видите, вызывающий метод не получает и не перехватывает возвращаемый SqlDataReader. Так что же происходит? Это SqlDataReader все еще там и открыт? Или это автоматически собирает мусор, так как ничто не обращается к нему? Р>
Я не мог придумать способ отладки и проверки этого. Если у кого-то есть какие-либо идеи или предложения, это было бы замечательно. Р>
Решение
Я верю, что он закроется, но не до тех пор, пока сборщик мусора не придет к нему, а это может продолжаться не очень долго ...