With for
calculating the completion percentage is easy:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
// Do somethings...
Console.WriteLine("{0}% Done!", i * 10 + j + 1);
}
}
Output:
1% Done!
2% Done!
3% Done!
4% Done!
5% Done!
6% Done!
7% Done!
8% Done!
9% Done!
10% Done!
11% Done!
12% Done!
13% Done!
...
93% Done!
94% Done!
95% Done!
96% Done!
97% Done!
98% Done!
99% Done!
100% Done!
But I don't have any idea about the calculating completion percentage with Parallel.For
:
Parallel.For(0, 10, i =>
{
Parallel.For(0, 10, j =>
{
// Do somethings...
Console.WriteLine("{0}% Done!", i * 10 + j + 1);
});
});
Output:
1% Done!
2% Done!
3% Done!
51% Done!
52% Done!
53% Done!
54% Done!
55% Done!
56% Done!
57% Done!
58% Done!
59% Done!
60% Done!
4% Done!
5% Done!
6% Done!
...
69% Done!
70% Done!
71% Done!
72% Done!
73% Done!
74% Done!
75% Done!
76% Done!
77% Done!
78% Done!
79% Done!
80% Done!
36% Done!
37% Done!
38% Done!
39% Done!
40% Done!
35% Done!
The output is not shown the correct completion percentage.
How to calculate completion percentage in the Parallel.For
without reduce the performance?
You can use Interlocked.Increment
method for that:
int progress = 0;
Parallel.For(0, 10, i =>
{
Parallel.For(0, 10, j =>
{
// Do somethings...
Console.WriteLine("{0}% Done!", Interlocked.Increment(ref progress));
});
});
There will be one increment per iteration of the inner loop. Some printouts may appear out of sequence - specifically, when a thread is preempted after obtaining the new value of the progress but before the printing is complete.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With