Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Rendement des enregistrements de base de données à l'aide de LinqToSql ?

Dans le cas de l'exécution d'une requête basique, il peut fonctionner de cette façon (c'est certainement possible) - cependant, dans le cas de l'interrogation d'un Table<T> nu , il pourrait que tout soit tamponné en premier ; vous pouvez peut-être essayer d'interroger le décompte pendant l'itération ou d'exécuter une trace. Dans ce cas, je soupçons il tamponnera d'abord.

Re fermé :ça dépend aussi;p Si quelqu'un utilise foreach , alors oui :depuis foreach supprime explicitement l'itérateur via finally . Cependant! Ce n'est pas garanti si quelqu'un le fait, par exemple (très méchant et laxiste) :

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

puis puisque l'itérateur ne a : se supprime, b :ne s'épuise pas et c :ne se bloque pas, il ne s'arrêtera pas correctement (aucune de ces 3 conditions sera fermez-le correctement). Emphase :il s'agit d'un cas pathologique :normalement, il est raisonnablement prudent de dire "ça va se fermer, oui".

Si vous voulez une non-mise en mémoire tampon garantie, notez que "dapper" l'a, si vous définissez buffered à false :

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

(il peut aussi gérer les paramètres etc)