【发布时间】:2016-02-12 21:47:57
【问题描述】:
我有一个对象集合,我想检索其属性之一与搜索字符串匹配的所有对象。到目前为止,我已经尝试了几种过滤方法,即 List.ForAll、IEnumerable.Where 和 ParallelQuery.Where。
List<Foo> cache = GetAllObjs(); // source list containing lots of objects
选项 1:
List<Foo> foos = cache.AsParallel().Where(x => x.Name == "bar").ToList();
选项 2:
List<Foo> foos = cache.Where(x => x.Name == "bar").ToList();
选项 3:
List<Foo> foos = cache.FindAll(x => x.Name == "bar");
因为 ParallelQuery.Where 使用多个内核,所以它似乎是最快的解决方案。除了这些,还有其他过滤方法吗,比如使用不同的集合类型,或者过滤函数?源集合不必是列表。
【问题讨论】:
-
Race the horses... 这可能取决于数组的大小和其他因素
-
我确实赛过马匹……反正我能想到的三匹马。我想知道周围是否有不同的马可以代替我比赛......
-
很难说(给定的)最佳选择是什么,就像我说的,对于较小的数组/列表,并行线程的启动时间可能不会提供任何好处的执行时间。可能也不需要调用
ToList