Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rendimento dei record del database di ritorno utilizzando LinqToSql?

Nel caso di esecuzione di una query di base, può funziona in questo modo (certamente è possibile) - tuttavia, nel caso di query su una Table<T> nuda , potrebbe sia che tutto bufferizzi prima; potresti forse provare a interrogare il conteggio durante l'iterazione o a eseguire una traccia. In questo caso io sospetto prima verrà eseguito il buffer.

Richiuso:dipende anche da;p Se qualcuno sta usando foreach , allora sì:poiché foreach elimina esplicitamente l'iteratore tramite finally . Tuttavia! Non è garantito se qualcuno lo fa, ad esempio (molto cattivo e permissivo):

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

quindi poiché l'iteratore non a:si elimina, b:si esaurisce e c:non si arresta in modo anomalo, non si spegnerà correttamente (qualsiasi di queste 3 condizioni si chiuderlo bene). Enfasi:questo è un caso patologico:normalmente è ragionevolmente sicuro dire "si chiuderà, sì".

Se vuoi garantire il non buffering, tieni presente che "dapper" lo ha, se imposti buffered a false :

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

(può anche gestire i parametri ecc.)