我想知道如何以最有效的方式实现这一目标。
我应该使用
a.RemoveAll(x => b.AsParallel().Any(y => y == x));
或
a.AsParallel().Except(b.AsParallel());
或其他什么?
任何人都可以解释底层差异是什么吗?在我看来,从测量来看,第二条线路较慢。这是什么原因?
答案 0 :(得分:4)
使用第二个选项,通过两个ParallelQuery<T>
操作,将并行执行整个操作:
var results = a.AsParallel().Except(b.AsParallel());
第一个选项会对删除执行顺序检查,并且必须为每次迭代构建ParallelQuery<T>
,这可能会慢得多。
但是,根据元素的数量,在没有AsParallel
的情况下运行它可能会更快:
var results = a.Except(b);
在许多情况下,较小集合的并行化开销超过了收益。在这种情况下,唯一知道的方法是分析和衡量所涉及的选项。
在我看来,从测量来看,第二条线路较慢。这是什么原因?
这可能是由于很多因素造成的。首先,确保您在发布版本中运行VS主机之外(这是一个常见问题)。否则,这可能是由于集合的大小和涉及的数据类型。