c# - SqlDataReader,一个流水游标——没有缓冲?

标签 c# odbc sqldatareader

所以我知道 SqlDataReader 非常快,你不知道你会得到多少行,它一次只为每一行分配内存。因此,如果我有一百万行小行(比如 4 到 32 字节),每行读取都意味着到服务器的往返?没有缓冲发生对吗?

如果我通过 SQL Native Client 使用 ODBC,我可以设置一个适当大的行缓冲区,以便每次往返获取 512 行。当消费者读取第 0 行时,我获取 512 行然后返回第 0 行,接下来的 511 次读取是内存访问,第 513 次读取是新的往返。

对我来说这应该更快(并且不必只转发),但是这也取决于结果集在服务器上的具体化方式。在后一种情况下,结果集必须在我开始通过网络获取之前完成,但我认为它使用的 SqlDataReader 和 TDS 可能不是这种情况(?),这是我不熟悉的协议(protocol)。任何评论表示赞赏。

最佳答案

DataReader 通过其 api 一次只分发 1 行,但它从数据库中批量获取数据,缓冲数据,因此它不必为每一行往返数据库。

关于c# - SqlDataReader,一个流水游标——没有缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1696128/

相关文章:

c# - 将 Winforms 控件添加到窗体时是否引发事件

c# - 从windows电脑执行命令ls到linux电脑

c# - 用 SQL 语句的结果填充任何 ArrayList

c# - yield 返回与返回 IEnumerable<T>

c# - 处理 DBNull 的通用方法

c# - 如何防止覆盖 WinForm 控件中的 "default"值?

c# - 如何增加 Linq2Entities 中的超时时间?

java - 加载 JDBC-ODBC 驱动程序时出现异常

PHP-ODBC 驱动程序安装问题

php - 找不到驱动程序 Debian SQL Server PHP