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)