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;
Run Code Online (Sandbox Code Playgroud)
如果我在300.000个元素的集合上运行此LINQ查询,则返回给定范围内的80个元素需要大约25毫秒 - 如果我使用HashSet <T>或ObservableCollection <T>则无关紧要.
如果我手动遍历所有元素并检查它们,则需要相同的时间,约25毫秒.
但我确实知道在给定范围内的所有日期的HashCode.是否可以从我的HashSet <T>获取具有给定HashCodes的所有元素?我觉得那会快得多......
是否可以加快LINQ查询?我假设它没有利用我的HashSet <T>的特殊能力?