快速构建哈希集的方法,单线程或多线程

本文关键字:单线程 多线程 方法 构建 哈希集 | 更新日期: 2023-09-27 17:51:02

我想知道为什么构建哈希集更快。

我的过程是这样的:

1,数据库访问(单线程),得到一个大的 id列表。

2,
计划一个

foreach( var oneID in IDs)
{
    myHashSet.add(oneID);
}
B计划

Parallel.ForEach(IDs,myPallOpt,(oneID)=>
{
    myHashSet.add(oneID);
});

那么A计划和B计划哪个更快?

谢谢

快速构建哈希集的方法,单线程或多线程

HashSet<T>不是线程安全的,因此第二个选项(使用Parallel.ForEach)可能会导致错误。这绝对应该避免。

最好的选择可能是直接从结果构建哈希集:
var myHashSet = new HashSet<int>(IDs);

注意,只有当HashSet只打算包含这个集合中的项时,这才有效。如果要添加到现有的HashSet<T>,则foreach(您的第一个选项)可能是最佳选择。

方案B可能不起作用,因为它可能不是线程安全的(大多数。net集合类都不是线程安全的)。您可以通过使对它的访问线程安全来修复它,但这实际上意味着对它的访问进行序列化,这并不比单线程更好。唯一有意义的情况是,在for循环开始和实际添加之间,您有一些cpu密集型处理,可以很好地并行化。