Кто-нибудь знает, как на самом деле работают DbDataReaders. Мы можем использовать SqlDataReader в качестве примера.
Когда вы делаете следующее
cmd.CommandText = "SELECT * FROM Customers";
var rdr = cmd.ExecuteReader();
while(rdr.Read())
{
//Do something
}
Имеет ли считыватель данных все строки в памяти, или он просто захватывает одну, а затем, когда вызывается Read, он переходит к БД и захватывает следующую? Кажется, что просто занесение одного в память было бы плохой производительностью, но введение всех их могло бы занять некоторое время при вызове ExecuteReader.
Я знаю, что я являюсь потребителем объекта, и неважно, как они его реализуют, но мне просто любопытно, и я думаю, что, вероятно, потрачу пару часов в Reflector, чтобы понять что он делает, поэтому подумал, что я спрошу кого-то, кто может знать.
Мне просто любопытно, если у кого-нибудь есть идея.