【发布时间】:2014-03-19 17:44:13
【问题描述】:
我想知道为什么构建哈希集更快。
我的过程是这样的:
1、DB访问(单线程),得到一个大的ID列表。
2,
A计划
foreach( var oneID in IDs)
{
myHashSet.add(oneID);
}
B计划
Parallel.ForEach(IDs,myPallOpt,(oneID)=>
{
myHashSet.add(oneID);
});
那么,A 计划和 B 计划哪个更快?
谢谢
【问题讨论】:
-
哈希集不是线程安全的。
-
我相当肯定 CPU 可以跟上来自数据库的 I/O。只要确保流式传输“大”I/O 步骤即可。无论如何,投票结束,因为问题是“最快的”,尽管没有确定问题/环境。使用 97/3 规则。
-
我正要和@SLaks 说同样的话...虽然 OP 可以使用 ConcurrentDictionary...除非 OP 可以接受某些实际上没有添加到 hashSet 中的项目(或以其他方式打破)。
-
@Xantix:那可能会更慢。
-
您的数据库服务是否会比通过一个连接的完整请求更快地通过多个连接获取部分请求?根据提供的信息,我们无法回答。这是问题的症结所在,哈希集的性能不太相关。 (尽管并行添加到非线程安全的集合中注定会失败。)
标签: c# multithreading hash hashset