SqlDataReader: В этом случае читатель закроется? - PullRequest
2 голосов
/ 29 октября 2008

Я очищаю 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 все еще там и открыт? Или это автоматически собирает мусор, так как ничто не обращается к нему?

Я не мог придумать способ отладки и проверки этого. Если у кого-то есть какие-либо идеи или предложения, это было бы замечательно.

1 Ответ

4 голосов
/ 29 октября 2008

Я верю, что он закроется, но не до тех пор, пока сборщик мусора не доберется до него, что может продолжаться не очень долго ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...