有谁知道 DbDataReaders 是如何工作的。我们可以以SqlDataReader为例。
当您执行以下操作时
cmd.CommandText = "SELECT * FROM Customers";
var rdr = cmd.ExecuteReader();
while(rdr.Read())
{
//Do something
}
数据读取器是否将所有行都保存在内存中,或者它只是抓取一个,然后当调用 Read 时,它会去数据库并抓取下一个吗?似乎只将一个带入内存会带来不好的性能,但是将它们全部带入会使调用 ExecuteReader 需要一段时间。
我知道我是对象的消费者,他们如何实现它并不重要,但我只是好奇,我想我可能会在 Reflector 中花几个小时来了解它在做什么,所以我想问问可能知道的人。
我只是好奇是否有人有想法。
最佳答案
如上所述 here :
Using the DataReader can increase application performance both by retrieving data as soon as it is available, and (by default) storing only one row at a time in memory, reducing system overhead.
据我所知,这是每个读者在 .NET 框架中的工作方式。
关于SqlDataReader/DbDataReader 实现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515681/