Aquí hay un código de ejemplo para recuperar datos de una base de datos utilizando la palabra clave de rendimiento que he encontrado en algunos lugar mientras alrededor de google:¿Usar el rendimiento para iterar sobre un lector de datos podría no cerrar la conexión?
public IEnumerable<object> ExecuteSelect(string commandText)
{
using (IDbConnection connection = CreateConnection())
{
using (IDbCommand cmd = CreateCommand(commandText, connection))
{
connection.Open();
using (IDbDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
yield return reader["SomeField"];
}
}
connection.Close();
}
}
}
Estoy en lo correcto al pensar que en este código de ejemplo, la conexión no lo haría cerrarse si no iteramos sobre todo el lector de datos?
Aquí es un ejemplo de que no se cierre la conexión, si entiendo correctamente dió ..
foreach(object obj in ExecuteSelect(commandText))
{
break;
}
Para una conexión db que podría no ser catastrófica, supongo que el GC sería limpiarlo con el tiempo, pero ¿Qué pasaría si en lugar de una conexión fuera un recurso más crítico?