【问题标题】:Performance issue while converting to .ToList() while executing LINQ from LiteDB approx. 1 million records从 LiteDB 执行 LINQ 时转换为 .ToList() 时的性能问题大约。 100 万条记录
【发布时间】:2019-10-09 07:33:13
【问题描述】:

我正在使用 LiteDB 存储大约 100 万条记录。当我在过滤后从 LiteDb 检索记录并从 IQueryable 转换 .ToList() 时,即使查询结果只是一条记录,它也非常慢。我真的坚持这一点。

我发现转换 .ToList() 的问题。

我正在阅读一些关于已经面临的类似问题(即 .ToList())的内容。但没有得到任何正确的解决方案。

我的示例代码:

IQueryable<student> activeFilterResult = liteDatabase
   .GetCollection<student>(studentcollection)
   .Find(Query.All())                                                  
   .AsQueryable<student>();

.......

activeFilterResult  
  .OrderBy(studentrecord => studentrecord.Id)
  .Select(studentrecord => studentrecord.Id)
  .Distinct()
  .ToList();

【问题讨论】:

  • 如果它们都相同,您在丢弃它们之前仍然订购了 1M 条记录。 ToList 创建一个副本,但只创建它得到的内容。
  • 如果你删除Distinct会怎样?
  • 在调用ToList 之前,您所做的基本上就是构造一个查询。尚未实际检索或排序或检查重复数据。您刚刚计划了一个在未来某个时间点执行的工作流。通过致电ToList,所有这些计划中的事情现在实际上都需要发生。速度慢不是ToList的“错”,而是因为你计划了很多事情要做。
  • @Arthur - 通常数据库在订购或查找重复项等方面“更好”。我从来没有使用过 LiteDB,所以最好简单地获取所有内容,然后在内存中处理它。

标签: c# linq litedb


【解决方案1】:

不要在没有任何过滤器的情况下使用ToList() 来输出所有数据。 1.一些过滤器,如First()Take(20) 2.than....致电ToList()

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2011-07-14
  • 2022-10-14
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
相关资源
最近更新 更多