High performance looping


using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace FastLoopingConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            long MaxNumber = 2500000000;
            
            /////////////////////////////////////////////////////////////
            long sum = 0;
            sw.Restart();
            sum = 0;
            Parallel.For(0, MaxNumber, (i) =>
            {
                Interlocked.Add(ref sum, (long) Math.Sqrt(i));
            });
            sw.Stop();
            Trace.WriteLine($"Method_1 (Parallel.For): Sum = {sum}");
            Trace.WriteLine($"Elapsed time {sw.Elapsed}");

            /////////////////////////////////////////////////////////////
            sw.Restart();
            sum = 0;
            var partinioner = Partitioner.Create(0, MaxNumber);
            Parallel.ForEach(partinioner, (range) =>
            {
                long partialSum = 0;
                for (long i = range.Item1; i < range.Item2; i++)
                {
                    partialSum += (long)Math.Sqrt(i);
                }
                Interlocked.Add(ref sum, partialSum);

            });
            sw.Stop();
            Trace.WriteLine($"Method_2 (Parallel.Foreach with partinioner): Sum = {sum}");
            Trace.WriteLine($"Elapsed time {sw.Elapsed}");

            /////////////////////////////////////////////////////////////
            sw.Restart();
            sum = 0;
            for (long i = 0; i < MaxNumber; i++)
            {
                sum += (long)Math.Sqrt(i);
            };
            sw.Stop();
            Trace.WriteLine($"Method_3 (Naive For): Sum = {sum}");
            Trace.WriteLine($"Elapsed time {sw.Elapsed}");
           
        }
    }
}

Results:

Method_1 (Parallel.For): Sum = 59627479402839
Elapsed time 00:00:47.4136964
Method_2 (Parallel.Foreach with partinioner): Sum = 59627479402839
Elapsed time 00:00:02.2316763
Method_3 (Naive For): Sum = 59627479402839
Elapsed time 00:00:04.1533972