【发布时间】:2013-08-12 09:37:17
【问题描述】:
我想知道什么是最好的方法,或者是否有任何文档/文章可以帮助我确定在正常情况下使用 Parallel.foreach 和 Task 的区别是什么 每个循环,如下所示:
案例 1 - Parallel.foreach:
Parallel.foreach
{
// Do SOmething thread safe: parsing an xml and then save
// into a DB Server thry respoitory approach
}
案例 2 - foreach 中的任务:
foreach
{
Task t1 = Task.factory.startNew(()=>
{
//Do the same thing as case 1 that is thread safe
}
}
Task.waitall()
- 我做了自己的测试,结果显示案例 1 的性能比案例 2 好。比率大约是这样的: 顺序 vs 案例 1 vs 案例 2 = 5s : 1s : 4s
虽然案例 1 和案例 2 几乎是 1:4?那么这是否意味着如果我们想在循环中并行运行,我们应该始终使用 parallel.foreach 或 parallel.for?
【问题讨论】:
-
男孩,我不相信你的测试结果吗...这些数字应该给你敲响警钟。
-
@Will - 创建任务与创建线程非常不同。 TPL 的存在理由。
-
@威尔,谢谢你的输入,我想我有同样的想法,但为什么结果显示不同?还有4次……
-
我不明白,你好像在说情况1的4s比情况2的1s好。
-
请原谅我糟糕的英语 + 在这里发布问题时缺乏经验。我要说的是,案例 1 只需要 1 秒来完成每个循环的工作,而案例 2 需要大约 4 秒来完成每个循环。 [编辑问题以解决混乱]pan>
标签: c# task-parallel-library parallel.foreach