【问题标题】:Linq vs Dataset. Store all in memory or paginiate query?Linq 与数据集。全部存储在内存中还是分页查询?
【发布时间】:2018-01-12 16:37:49
【问题描述】:

我正在学习 C# 并试图了解有关集合的更多信息。几天前我请了一位导师,他告诉我 Linq 迭代大数据结果的优点,所以我打算使用它,但现在想知道我是否理解错误。

我正在查询 Mysql,将有多达 200,000 个结果需要格式化并以 500 个为一组以 JSON 格式发布到 HTTP 服务器。我应该进行单个查询,然后使用 Linq 对结果进行分页,还是应该将 SELECT 分成 500 个组?

我的理解是数据流是:

Mysql
   => MysqlDataAdapter
      => Fill DataSet
         => Use Linq to paginate

或者

Mysql
   => MysqlDataAdapter (Limit 500)
      => Fill DataSet

只是想从性能角度找出哪种方式更有意义。它将查询本地主机。

【问题讨论】:

  • 如果您想要 500 个结果,那么我不会从数据库中请求所有 200,000+(并且可能会增加)。您的数据库查询应该允许您选择页码和页面大小。
  • 性能观点 是一个广义的术语(想想 CPU/内存/IO 等等)并且没有目标(我需要能够在一秒钟内运行 1000 次) ) 答案充其量只是一个仍然不太可能适合您的情况的意见。
  • 感谢 Rene 的评论,你说得对,我没有提到它如何/何时运行。第一次运行时,它将以 500 个为一组处理所有 200,000 个结果。之后,它将每 5 分钟执行一次更改的项目。试图看看如何将其合并到我的通用查询类中:stackoverflow.com/a/6185236/3025534
  • 另一个选项是使用 Provider 对象的能力来一次加载许多行。考虑到它们正在做什么,它可能没有那么有用,因为您必须保持某种偏移量(也许 RowFilter 会减轻这种情况)。但是DataAdapter.Fill(int First, int Count, DataTable[]) 允许我们在给定大小的“页面”中加载数据

标签: c# mysql linq


【解决方案1】:

在这里你可以找到一些可以帮助你的比较datareader-vs-dataset-vs-linq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多