【问题标题】:Are datareaders still faster than datasets?数据阅读器仍然比数据集快吗?
【发布时间】:2011-07-22 21:38:41
【问题描述】:

自从 .NET 发布测试版以来,我一直在使用它进行编码。那是一段很长的时间,我应该重新审视我的一些假设,看看情况是否发生了变化。

我最大的假设之一是 datareader 比数据集更快 - http://www.sitepoint.com/dataset-datareader/

现在还是这样吗?有什么改变吗?我听说现在有一些比数据阅读器更“健谈”的东西,但找不到任何文章来支持它。这个想法是,当我“readnext”时,我必须进行一次数据库往返,而另一种方法是一次抓取所有内容。

现在有没有比datareader更快的替代品,还是上面的文章仍然正确?

作为记录,当我有一个数据读取器时,我所做的就是将行值放入一个对象中,将对象放入一个哈希表中,读取下一行,重复,然后关闭连接。任何逻辑连接对象都可以在连接关闭后使用哈希表完成(尽快释放池)。

【问题讨论】:

  • “roomers”应该拼写为“rumors”
  • @LarsTech 谢谢!固定。

标签: .net performance


【解决方案1】:

DataReader 和 DataSet 具有不同的功能集。如果 DataReader 没有您需要的 DataSet 功能,那么它的速度有多快都没有关系。你在比较苹果和橘子。

如果你想要一个苹果,就用一个苹果,如果你想要一个橙子,就用那个。使用最适合工作的工具。

【讨论】:

  • 我最关心的是速度。我正在使用数据阅读器,因为我不需要数据集的功能。我担心在过去的 8 年中可能发生了一些变化,比数据读取器更快的东西可能会使数据读取器过时。
  • @JSWork - 关键是,DataSets 并不比 DataReaders 慢,因为 DataReaders 不能做 DataSets 可以做的事情。这是不同的功能。如果您需要 DataReader,请使用 DataReader,因为它是要使用的适当类,而不是因为它比不是 DataReader 的东西更快。如果您需要 DataReader,请继续使用它们。
  • 当速度是我最关心的问题时,您能否给我一个不适合使用数据读取器而不是数据集的情况?在此之前,我从未遇到过需要我使用数据集而不是数据读取器的情况。如果我用我的教条方法做错了,我很想知道。
  • 我的部分困惑在于文章指出数据集使用数据读取器来填充自己。如果是这种情况,数据集如何不慢?
【解决方案2】:

通过DbDataAdapter 对象填充DataSet 的底层逻辑没有改变。它仍然使用DbDataReader 来填充数据集。因此,根据定义,使用 DataReader 进行您描述的操作仍然会更有效。

【讨论】:

  • 谢谢。听起来房客就是这样 - 房客。
  • @JSWork:现在肯定有更多的方法来获取数据(实体框架的东西,Linq 等)。其中大多数提供了更多的抽象层。对于直接从数据库服务器读取数据,DataReader 相当薄。它当然取决于供应商的实现,但基本逻辑是执行一条 SQL 语句,然后读回数据行,没有其他任何事情发生。而且由于它们是只向前的,它允许供应商利用预读缓存。我不知道读取此类数据的更快方法(在 .NET 中),但我也不是说它们不存在。
【解决方案3】:

是的,DataSet 仍然非常慢,因此您永远不应该将它们用于任何拥有超过 1 个用户或 Web 应用程序的系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多