Skip to content

Instantly share code, notes, and snippets.

@jackmott
Last active February 27, 2025 22:28
Show Gist options
  • Save jackmott/9d34fc85738f7bc962837f5db0db8901 to your computer and use it in GitHub Desktop.
Save jackmott/9d34fc85738f7bc962837f5db0db8901 to your computer and use it in GitHub Desktop.
linq performance net10
Method Mean Error StdDev Gen0 Allocated
SumLoopShort 2.371 ns 0.0380 ns 0.0356 ns - -
SumLinqShort 2.849 ns 0.0505 ns 0.0473 ns - -
SumLoopLong 3,557.375 ns 29.2171 ns 24.3976 ns - -
SumLinqLong 599.220 ns 3.5048 ns 3.2784 ns - -
ComplexSumLoopLong 19,158.862 ns 374.6008 ns 367.9080 ns - -
ComplexSumLinqLong 27,317.165 ns 267.0329 ns 249.7828 ns - 48 B
ComplexSumLoopShort 2.676 ns 0.0363 ns 0.0283 ns - -
ComplexSumLinqShort 21.36 ns 0.2747 ns 0.2435 ns 0.0124 48 B
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace MyBenchmarks
{
    [MemoryDiagnoser]
    public class LinqTest
    {
        private const int longArrayLen = 10000;
        private readonly int[] longArray;

        private const int shortArrayLen = 5;
        private readonly int[] shortArray;

        

        public LinqTest()
        {
            longArray = new int[longArrayLen];
            shortArray = new int[shortArrayLen];
            Random r = new Random(1);
            for (int i = 0; i < longArray.Length; i++)
            {
                longArray[i] = r.Next(-10, 10);
            }
            for (int i = 0; i < shortArray.Length; i++)
            {
                shortArray[i] = r.Next(-10, 10);
            }
        }

        [Benchmark]
        public int SumLoopShort()
        {
            int sum = 0;
            for (int i = 0; i < shortArray.Length; i++)
            {
                sum += shortArray[i];
            }
            return sum;
        }

        [Benchmark]
        public int SumLinqShort()
        {
            return shortArray.Sum();
        }

        [Benchmark]
        public int SumLoopLong()
        {
            int sum = 0;
            for (int i = 0; i < longArray.Length; i++)
            {
                sum += longArray[i];
            }
            return sum;
        }

        [Benchmark]
        public int SumLinqLong()
        {
            return longArray.Sum();
        }


        [Benchmark]
        public int ComplexSumLoopLong()
        {
            int sum = 0;
            for (int i = 0; i < longArray.Length; i++) {
                var val = longArray[i];
                if (val % 2 == 0) {
                    sum += val * val; 
                }
            }
            return sum;
        }

        [Benchmark]
        public int ComplexSumLinqLong()
        {
            return longArray.Where(n => n % 2 == 0).Sum(n=>n*n);
        }

        [Benchmark]
        public int ComplexSumLoopShort()
        {
            int sum = 0;
            for (int i = 0; i < shortArray.Length; i++)
            {
                var val = shortArray[i];
                if (val % 2 == 0)
                {
                    sum += val * val;
                }
            }
            return sum;
        }

        [Benchmark]
        public int ComplexSumLinqShort()
        {
            return shortArray.Where(n => n % 2 == 0).Sum(n => n*n);
        }



    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<LinqTest>();
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment