c# - 如果 SqlDataAdapter 在内部使用数据读取器,为什么人们说使用 SqlDataReader 更快?

标签 c# .net design-patterns ado.net

我一直读到 SqlDataReaders 比 SqlDataAdapters 快得多,因为它们具有快进、只读、一次一行连接的特性,而且在填充 DataTable 对象时它们比 SqlDataAdapters 特别快(SqlDataAdapter.Fill(dataTable)).

但是,有时会有人提到“使用什么可能不会有什么不同,因为 SqlDataAdapter 在内部使用数据读取器来填充它的表。”如果这是真的,那么如果适配器通过使用内部数据读取器与数据库通信,那么它究竟是如何慢得多的呢?

我知道我可以设置一些测试并分析每个测试的性能,但我真正想要的是,如果我们基本上以任何一种方式处理相同的过程,有人可以阐明所谓的性能差异.

我知道您通常会使用读取器来创建强类型 POCO 列表,这与仅填充表格的数据适配器不同。但是,我的问题严格来说是关于两者之间性能差异的细节,而不是 O/RM 问题......

最佳答案

如果您使用的是 DataReader,您可以在阅读第一行时对某些信息使用react,甚至可以忽略阅读的其余部分。

如果您使用的是 DataAdapter,则必须先加载整个表,然后读取第一行以便对相同的信息使用react。

关于c# - 如果 SqlDataAdapter 在内部使用数据读取器,为什么人们说使用 SqlDataReader 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13142070/

相关文章:

c# - 如何使用没有声明元素的 xml writer 创建 xml

c# - 如何在 C# 中实现线程安全的无错误事件处理程序?

c# - SSO - 未找到 OpenID 端点

.net - 如何在没有 try-catch 的情况下检测 WCF 连接?

c# - Correct Concurrent Collection 存储定时非循环结构

.net - Java EE 解决方案架构师能否为 .NET 商店做出贡献?

javascript - 将大型应用程序转换为 SPA

C# 观察者模式 : Still tightly connected?

design-patterns - 细粒度装饰器模式

language-agnostic - 是否有任何模式或是否有任何用于继承数据/对象的标准术语?