我想知道如何以最有效的方式实现这一目标。
我应该使用
a.RemoveAll(x => b.AsParallel().Any(y => y == x));
要么
a.AsParallel().Except(b.AsParallel());
或者是其他东西?
谁能解释其根本区别是什么?从我的角度来看,第二行似乎较慢。这是什么原因呢?
最佳答案
使用带有两个ParallelQuery<T>
操作的第二个选项,将并行执行整个操作:
var results = a.AsParallel().Except(b.AsParallel());
第一个选项对删除进行顺序检查,并且必须为每次迭代构建
ParallelQuery<T>
,这可能会慢得多。但是,取决于元素的数量,实际上在没有
AsParallel
的情况下运行起来可能会更快:var results = a.Except(b);
在许多情况下,为较小的集合进行并行处理的开销超过了收益。在这种情况下,唯一的了解方法就是分析和衡量所涉及的选项。
从我的角度来看,第二行似乎较慢。这是什么原因呢?
这可能是由于许多因素造成的。首先,确保您在发行版本中不在VS主机上运行(这是一个常见问题)。否则,这可能是由于集合的大小和所涉及的数据类型造成的。