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

¿Rendimiento de retorno de registros de base de datos usando LinqToSql?

En el caso de ejecutar una consulta básica, puede funciona de esa manera (ciertamente es posible); sin embargo, en el caso de consultar una Table<T> desnuda , podría sea ​​que todo se amortigua primero; tal vez podría intentar consultar el recuento durante la iteración o ejecutar un seguimiento. En este caso sospecho primero se almacenará en el búfer.

Re cerrado:eso también depende;p Si alguien está usando foreach , entonces sí:desde foreach elimina explícitamente el iterador a través de finally . ¡Sin embargo! No está garantizado si alguien lo hace, por ejemplo (muy travieso y flojo):

var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
    Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad

entonces, dado que el iterador no a:se elimina, b:se agota solo y c:no falla, no se cerrará correctamente (cualquiera de esas 3 condiciones lo hará cerrarlo correctamente). Énfasis:este es un caso patológico:normalmente es razonablemente seguro decir "se cerrará, sí".

Si desea garantizar el no almacenamiento en búfer, tenga en cuenta que "dapper" lo tiene, si configura buffered a false :

IEnumerable<Customer> customers = connection.Query<Customer>(
       "select * from Customer", buffered: false);

(también puede manejar los parámetros, etc.)