SqlDataReader/DbDataReader 实现问题

标签 sql sqldatareader dbdatareader

有谁知道 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/

相关文章:

c# - System.Data.Common.DbDataReader.ReadAsync 中的异步是什么?

数据库连接无法完成的 Java 登录方法

sql - 为什么我的表不支持外键?

c# - 阅读器关闭时调用 Read 的尝试无效。 ExecuteReader获取多表结果

c# - 使用 SQL 调用从数据库中检索数据后的特定 if else 语句。 Visual Studio 2015/C#

c# - 通用 DbDataReader 到 List<T> 的映射

SQL 无效的 ALTER TABLE 选项

mysql - 存储过程中的动态 MySQL Where 子句

c# - LINQ 是将 SQL Server 中的所有项目加载到内存中还是仅加载到 block 中?