所以我理解SqlDataReader非常快,你不知道你会得到多少行,它一次只为每行分配内存。那么,如果我有一百万行小行(比如4到32个字节),那么每行读取意味着到服务器的往返行程?没有缓冲发生吗?
如果我通过SQL Native Client使用ODBC,我可以设置一个相当大的行缓冲区来获取每个往返的512行。当消费者读取第0行时,我获取512行然后返回第0行,接下来的511次读取是内存访问,第513次读取是新的往返。
对我而言,这应该更快(并且不一定只能转发),但这取决于结果集在服务器上的实现方式。在后一种情况下,结果集必须在我开始通过网络获取之前完成,但对于我认为它使用的SqlDataReader和TDS可能不是这种情况(?),这是我不熟悉的协议。任何评论赞赏。
答案 0 :(得分:4)
一个DataReader通过它的api一次只发出一行,但它从数据库中提取大量数据,缓冲数据,这样就无需每行往返数据库。
答案 1 :(得分:3)
不,SqlDataReader在客户端进行缓冲。绝对不是要去服务器来取回你的行。