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>();
}
}
}