In het geval van het uitvoeren van een basisquery, kan werk op die manier (het is zeker mogelijk) - echter in het geval van het opvragen van een naakte Table<T>
, het misschien of het nu allemaal eerst buffert; u kunt misschien proberen de telling tijdens de iteratie op te vragen of een tracering uit te voeren. In dit geval vermoed ik het zal eerst bufferen.
Re gesloten:dat hangt er ook van af;p Of iemand foreach
gebruikt , dan ja:sinds foreach
verwijdert expliciet de iterator via finally
. Echter! Het is niet gegarandeerd als iemand bijvoorbeeld (heel ondeugend en laks):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
aangezien de iterator niet a:verwijderd wordt, b:zichzelf uitput, en c:niet crasht, zal het niet goed afsluiten (elk van die 3 voorwaarden zal sluit het goed). Nadruk:dit is een pathologisch geval:normaal gesproken is het redelijk veilig om te zeggen "het zal sluiten, ja".
Als u gegarandeerd niet-bufferen wilt, houd er dan rekening mee dat "dapper" dat heeft, als u buffered
instelt naar false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(het kan ook de parameters enz. aan)