gpt4 book ai didi

c# - 在大型集合上按小时获取最新数据时,LINQ 出现性能问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:43:11 24 4
gpt4 key购买 nike

我有一个通用的 List<T> ticker收藏地点T除其他外,对象具有属性 AsOfDate这是DateTime .此列表集合可以包含 >20k 项。

我正在从 AsOfDate 获取最近的小时数,其中金额由变量指定 amount类型 int (例如 3)

我的代码是:

from x in ticker
let y = ticker.OrderByDescending(y => x.AsOfDate).First()
where x.AsOfDate > y.AsOfDate.AddHours(-amount)
orderby x.AsOfDate descending
select x).ToList();

在处理小型数据集(例如列表中的 200 个项目)时,这很好用。但是,在处理列表中的 20,000 多个项目时,我发现速度问题很严重(3 分钟)。

为什么 LINQ 查询需要这么长时间?我该如何改进它?

最佳答案

您可以通过预取 y 来解决这个问题:

var dateLimit = ticker
.OrderByDescending(y => x.AsOfDate)
.First().AsOfDate.AddHours(-amount);

var result =(
from x in ticker
where x.AsOfDate > dateLimit
orderby x.AsOfDate descending
select x
).ToList();

目前,您在每次迭代中不断重新评估y,这需要对 O(n2log2n).

关于c# - 在大型集合上按小时获取最新数据时,LINQ 出现性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com