C# 泛型 HashSet
我有大量的唯一元素,每个元素都有一个不唯一的 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
如果我手动遍历所有元素并检查它们,则需要相同的时间,约 25 毫秒。
但我确实知道给定范围内的所有日期的 HashCode。是否可以从我的 HashSet
是否可以加速 LINQ 查询?我认为它没有利用我的 HashSet
最佳答案
您没有使用正确的数据结构。您应该使用类似排序列表(在 Date
属性上排序)之类的东西,然后您可以在其中对范围的开头和结尾进行二分搜索。
关于performance - C# HashSet<T> 搜索性能(与 ObservableCollection<T> 相比)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10639856/