Вопрос

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top