首页 新闻 会员 周边 捐助

用并行后效率大幅下降?

0
[已解决问题] 解决于 2014-12-04 09:27

var strings = new List<string>();
var result = new List<string>();
for (int i = 0; i < 10000; i++)
{
strings.Add(i.ToString());
}
var sw = new Stopwatch();

sw.Start();
for (int i = 0; i < strings.Count; i++)
{
strings[i] += strings[i];
}
sw.Stop();
Console.WriteLine(sw.ElapsedTicks); //1319

sw.Restart();
ParallelLoopResult loopResult = Parallel.ForEach(
Partitioner.Create(strings, true),
() => new List<string>(),
(str, state, i, listLocal) =>
{
listLocal.Add(str);
return listLocal;
},
o =>
{
lock (result)
result.AddRange(o);
});
sw.Stop();
Console.WriteLine(sw.ElapsedTicks); //5679
//为什么用并行后效率差了将近5倍?

Eysa的主页 Eysa | 初学一级 | 园豆:62
提问于:2014-11-05 08:30
< >
分享
最佳答案
0

并行这样玩当然没优势了,List的操作不还得排队啊~如果要并行,应该选择耗时的任务来测试。

奖励园豆:5
幻天芒 | 高人七级 |园豆:37207 | 2014-11-05 08:56
其他回答(1)
0

开线程的代价也是不容忽视的,而且你还有lock,不待你这样玩的。。。

平常心队长 | 园豆:1113 (小虾三级) | 2014-11-05 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册