我想知道我是否将所有常规ForEach更改为Parallel.ForEach,会加快我的所有迭代次数,还是取决于具体情况?
答案 0 :(得分:3)
这取决于您的处理方式。如果它受单个CPU线程绑定并且你有多个可用的,那么是的它会更快。如果您的代码正在等待数据库,那么如果数据库支持良好的并行操作,那么产生多个副本可能会略有增加。
要考虑的最重要的事情是,如果在线程之间进行分割,您的代码是否会正常工作,或者您是否有可能导致问题的竞争条件?
答案 1 :(得分:3)
取决于具体情况。 for-each的大多数实例不执行计算上昂贵的操作或阻塞操作,因此创建任务和分配线程的开销太大而不值得。
并行性不是性能的圣杯,并非所有问题都可以并行化以提高性能。
答案 2 :(得分:1)
这一切都取决于具体情况。如果可以的话,每个并行运行将同时运行多次迭代,但有时它可以在单个处理器机器上运行。
您必须小心,但是您尝试加速的任务不应该以串行方式运行。您仍然需要担心并发条件,例如多个线程写入相同的列表等,因此使用它并不总是最好的想法。
答案 3 :(得分:1)
这绝对取决于具体情况,执行线程操作会涉及很多开销,例如:
foreach(char c in alphabet)
{
myStr += c;
}
不会受益于并行化(以及其他问题)。在哪里像:
foreach(File f in myLargeLogFiles)
{
LogFileProcessor p = new LogFileProcess();
p.ProcessLogFile(f);
}
很可能从并行化中受益。它归结为环路内的工作负荷有多重;并行性带来的好处大于创建线程,线程同步等开销的好处。