C# 的泛型 HashSet<T> 搜索性能应该是 O(1),而 ObservableCollection<T> 的搜索性能应该是 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 查询,则返回给定范围内的 80 个元素大约需要 25 毫秒 - 我使用 HashSet<T> 还是 ObservableCollection<T> 都没有关系。
如果我手动遍历所有元素并检查它们,则需要相同的时间,约 25 毫秒。
但我确实知道给定范围内的所有日期的 HashCode。是否可以从我的 HashSet<T> 中获取具有给定 HashCodes 的所有元素?我觉得这样会快很多...
是否可以加快 LINQ 查询?我假设它没有利用我的 HashSet<T> 的特殊能力?