Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server e restrições de memória .NET, alocações e coleta de lixo


O problema é que, por algum motivo, seu DataReader não está sendo fechado. Uma exceção? O usuário do método não se lembrou de fechar o DataReader?

Uma função que retorna um DataReader para ser usado fora de seu corpo deixa a responsabilidade de fechá-lo para o código externo, portanto não há garantia de que o Reader será fechado. Se você não fechar o leitor, não poderá reutilizar a conexão na qual ele foi aberto.

Então, retornar um DataReader de uma função é uma péssima ideia!

Você pode ver uma discussão completa sobre este assunto aqui .

Procure os usos desta função (GetDataReader ), e verifique se há garantia de que o leitor está sendo fechado. E, mais importante, que não há possibilidade de que esse código entre novamente e use a mesma coleção para abrir um novo DataReader antes que o primeiro seja fechado. (Não se deixe enganar pelo CommandBehavior.CloseConnection. Isso só se encarrega de fechar a conexão quando o DataReader estiver fechado... somente se você não deixar de fechá-lo)