如果SqlDataAdapter在内部使用DataReader,为什么人们说使用SqlDataReader更快?

7
我不断地看到SqlDataReaders比SqlDataAdapters快,因为它们具有快速向前、只读和一次连接一行的特性,而且在用于填充DataTable对象(SqlDataAdapter.Fill(dataTable))时,它们特别比SqlDataAdapters快。
然而,有时候会有人提到“使用DataAdapter可能不会有什么区别,因为SqlDataAdapter内部使用数据读取器来填充其表格。”如果这是真的,那么适配器如何能够比使用内部数据读取器与数据库通信的情况慢得多呢?
我知道我可以设置一些测试并分析每个测试的性能,但我真正想要的是有人解释一下所述性能差异的细节,如果我们实际上用两种方式处理同样的过程,该怎么办。
我了解到您通常会使用读取器来创建强类型POCO的列表,而数据适配器只是填充表格。然而,我的问题严格限于两者之间性能差异的细节,而不涉及O / RM问题...
1个回答

5

如果你正在使用DataReader,你可以在读取第一行时对某些信息做出反应,甚至可以忽略其余的读取。

如果你正在使用DataAdapter,你必须先加载整个表格,然后再读取第一行以便对该信息做出反应。


已经注意到了,但如果我不必检查每一行是否满足某个条件怎么办?换句话说,如果我只是想检索整个记录子集以便填充 GridView,该怎么办? - bglee
1
@bglee,你需要引用来源来证明在所有情况下为什么你认为DataReader比DataAdapter更快。它们只是访问数据的不同工具。DataAdapters是更重的对象,因为它们可以对数据执行更多的操作,例如更新、删除等。 - LarsTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接