linq 如果基础集合是HashSet而不是List,C#集合操作(Union、Intersect、Except、DIStinct)是否更快< T>< T>?

5anewei6  于 2022-12-06  发布在  C#
关注(0)|答案(1)|浏览(116)

对于一个大规模的集合运算,我已经用List<T>Union<T>做过了,Intersect<T>
我是否可以将底层集合交换为HashSet<T>,而不是List<T>来执行这些LINQ Set操作,并立即看到性能改进?

fslejnso

fslejnso1#

如果底层集合还没有在接口中实现set操作,那么这些方法都足够智能,可以使用O(n)算法,因此对于大多数用例来说,性能差异不足以担心。
在.NET Framework中,我看到这些方法中的每一种方法在我的基于LINQPad的基准测试中有大约10%的差异。
在.NET 6中,没有统计学上的显著差异。这并不奇怪,因为source code在所有这些方法中只使用内部Set实现,而不管它被赋予什么IEnumerable<>

相关问题