sql >> Base de Datos >  >> RDS >> Sqlserver

Restricciones de memoria, asignaciones y recolección de elementos no utilizados del servidor SQL y .NET

El problema es que, por alguna razón, su DataReader no se cierra. ¿Una excepción? ¿El usuario del método no recordó cerrar el DataReader?

Una función que devuelve un DataReader para usarlo fuera de su cuerpo deja la responsabilidad de cerrarlo al código externo, por lo que no hay garantía de que el Lector se cierre. Si no cierra el lector, no puede reutilizar la conexión en la que se abrió.

¡Así que devolver un DataReader desde una función es una muy mala idea!

Puede ver una discusión completa sobre este tema aquí .

Busque los usos de esta función (GetDataReader ), y verifique si hay garantía de que el lector se está cerrando. Y, lo más importante, que no hay posibilidad de que este código vuelva a entrar y utilice la misma colección para abrir un nuevo DataReader antes de que se cierre el primero. (No se deje engañar por CommandBehavior.CloseConnection. Esto solo se encarga de cerrar la conexión cuando el DataReader está cerrado... solo si no falla al cerrarlo)