I'm reading about parallel for (and foreach
) and run code like this:
var ints = new int[50000];
Random rnd = new Random();
for (int i = 0; i < ints.Length; i++)
ints[i] = rnd.Next(1000, 9999);
int sum = 1;
Stopwatch stopper = new Stopwatch();
stopper.Start();
for (int i = 0; i < ints.Length; i++)
{
for (int j = 0; j < ints.Length; j++)
sum++;
sum = sum * ints[i];
}
stopper.Stop();
var ordinary = stopper.Elapsed;
stopper = new Stopwatch();
int sum2 = 1;
stopper.Start();
Parallel.For(0, ints.Length, i =>
{
for (int j = 0; j < ints.Length; j++)
sum2++;
});
stopper.Stop();
var paralel = stopper.Elapsed;
Console.WriteLine("ordinary\t{0}\nparalel\t{1}", ordinary, paralel);
Console.WriteLine("sum1:{0}\tsum2{1}", sum, sum2);
But the result isn't clear for me:
ordinary 00:00:04.9762059
paralel 00:00:23.2902043
sum1:1911321936 sum2474452665
Can you tell me why in this case parallel is slower than ordinary for?
I've read this topic Parallel.ForEach Slower than ForEach
But aren't there enough to count and parallel.for
shouldn't be faster in this case?
Can you give me some example where i can see parallel.for
is really faster?