gpt4 book ai didi

performance - C# HashSet 搜索性能(与 ObservableCollection 相比)?

转载 作者:行者123 更新时间:2023-12-04 14:32:14 25 4
gpt4 key购买 nike

C# 泛型 HashSet 的搜索性能应该是 O(1),而 ObservableCollection 的搜索性能应该是 O(n)。

我有大量的唯一元素,每个元素都有一个不唯一的 DateTime 属性。

每个元素通过简单地返回其 DateTime.GetHashCode() 来计算其 HashCode。

现在我想获取我的数据的一个子集,例如日期介于 2012 年 3 月和 2012 年 6 月之间的所有元素。

    var result = from p in this.Elements
where p.Date >= new DateTime(2012, 03, 01) &&
p.Date <= new DateTime(2012, 30, 06
select p;

如果我在 300.000 个元素的集合上运行此 LINQ 查询,则需要大约 25 毫秒才能返回给定范围内的 80 个元素 - 使用 HashSet 或 ObservableCollection 都没有关系。

如果我手动遍历所有元素并检查它们,则需要相同的时间,约 25 毫秒。

但我确实知道给定范围内的所有日期的 HashCode。是否可以从我的 HashSet 中获取具有给定 HashCode 的所有元素?我认为那会快得多......

是否可以加速 LINQ 查询?我认为它没有利用我的 HashSet 的特殊能力?

最佳答案

您没有使用正确的数据结构。您应该使用类似排序列表(在 Date 属性上排序)之类的东西,然后您可以在其中对范围的开头和结尾进行二分搜索。

关于performance - C# HashSet<T> 搜索性能(与 ObservableCollection<T> 相比)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639856/

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