C#泛型HashSet<T>的搜索性能应该是O(1),ObservableCollection<T>的搜索性能应该是O(n)。
我有大量唯一的元素,每个元素都有一个不唯一的DateTime属性。
每个元素通过简单地返回其DateTime.GetHashCode()来计算其HashCode。
现在我想获取我的数据的子集,例如所有日期在2012年3月到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<T>或ObservableCollection<T>都没有影响。
如果我手动循环遍历所有元素并检查它们,需要相同的时间,大约25毫秒。
但是我知道所有在给定范围内的日期的HashCode。是否可以从我的HashSet<T>中获取具有给定HashCode的所有元素?我认为这样会快得多...
有可能加速LINQ查询吗?我假设它没有利用我的HashSet<T>的特殊能力?