using System.Collections.Concurrent;
using System.Threading.Tasks;
using System.Diagnostics;
public const int length = 1000000, dim = 100;
private static double[][] map;
public static void Main()
int[] source = Enumerable.Range(0, length).ToArray();
long[] targetSequential = new long[length];
long[] targetParallel = new long[length];
map = Enumerable.Range(0, dim).Select(x =>
Enumerable.Range(0, dim).Select(y => r.NextDouble()).ToArray())
Stopwatch sw = Stopwatch.StartNew();
MainGeneration(source, targetSequential, false, true);
Console.WriteLine("Ellapsed ms (Sequential): {0}", sw.ElapsedMilliseconds);
MainGeneration(source, targetParallel, true, true);
Console.WriteLine("Ellapsed ms (Parallel): {0}", sw.ElapsedMilliseconds);
private static void MainGeneration(int[] source, long[] target, bool asParallel, bool bigCalculations)
Parallel.ForEach(Partitioner.Create(source, true).GetOrderableDynamicPartitions(), intItem =>
target[i] = Map(intItem.Value, i, bigCalculations);
foreach(int num in source)
target[i] = Map(num, i, bigCalculations);
private static long Map(long num, long i, bool bigCalculations)
if(!bigCalculations) return num;
for(int j = 0; j < 1000; ++j)
for(int l = 0; l < dim; ++l)
for(int m = 0; m < dim; ++m) {
n += (long)(map[l][m] * 1000);
return (long)(num * Math.PI);