所以我知道 SqlDataReader 非常快,你不知道你会得到多少行,它一次只为每一行分配内存。因此,如果我有一百万行小行(比如 4 到 32 个字节),每行读取意味着往返服务器?没有缓冲发生对吗?
如果我通过 SQL Native Client 使用 ODBC,我可以设置一个适当大的行缓冲区,以便每次往返获取 512 行。当消费者读取第 0 行时,我读取 512 行然后返回第 0 行,接下来的 511 次读取是内存访问,第 513 次读取是新的往返。
对我来说,这应该更快(并且不必只转发),但是它也取决于结果集如何在服务器上实现。在后一种情况下,结果集必须在我开始通过网络获取之前完成,但对于我不熟悉的 SqlDataReader 和 TDS 可能不是这种情况(?)。任何意见表示赞赏。