请告知有没有一种标准方法可以更快地进行查询
var res = qlist.Where(o => o.left >= x && o.right >= x).ToList()
qlist对象最多可包含数百万个元素,此类查询可能会非常慢。是否有linq的索引或类似的东西?
由于
更新: 抱歉无法在评论中回答。 它是linq-to-objects,目的是缓存DB。
答案 0 :(得分:3)
虽然针对数据库执行的LINQ2SQL查询享受可能在数据库中定义的索引,但是在内存中没有执行LINQ查询的索引。
不幸的是,您需要自己滚动:对列表进行排序,使用List.BinarySearch
获取初始和最后位置,然后使用LINQ获取其间的所有条目。
答案 1 :(得分:3)
除了告诉你使用数据库(已经写好),你可以通过两种方式提高性能:
使用AsParallel:
var res = qlist.AsParallel()。其中(o => o.left> = x&& o.right> = x)。ToList();
您可以将商品插入两个不同的排序列表,一个按left
,另一个按right
。对于给定的x,使用二进制搜索找到与其等于(或几乎等于)的项目,并从该列表中获取该项目之后的所有项目。最终结果应该是从两个列表中选择的项目。我不知道它是否更有效率。这取决于您执行的插入数量以及您可以找到的项目数量。