【发布时间】:2010-10-21 09:29:28
【问题描述】:
您可以猜到 Parallel.For() 循环的索引从一个值跳转到另一个值。如何估算完成的工作量?
谢谢。
【问题讨论】:
您可以猜到 Parallel.For() 循环的索引从一个值跳转到另一个值。如何估算完成的工作量?
谢谢。
【问题讨论】:
通过保留计数器而不是查看索引?例如:
int counter = 0;
Parallel.For(4, 500, i => {
// TODO: something useful...
int progress = Interlocked.Increment(ref counter);
Console.WriteLine("{0}: {1}", progress, i);
});
(Interlocked 的用法对于避免在访问 counter 时出现竞争条件至关重要)
【讨论】:
int progress = 0;
Parallel.For( from, to, i => {
// do the job
Interlocked.Increment(ref progress);
});
现在实际进度是(float)(to - from) / progress
【讨论】: