Skip to content

Instantly share code, notes, and snippets.

@teoadal
Last active March 14, 2023 19:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teoadal/202dacd3cecb67f5f435a9cf8a0f9e53 to your computer and use it in GitHub Desktop.
Save teoadal/202dacd3cecb67f5f435a9cf8a0f9e53 to your computer and use it in GitHub Desktop.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using Random = System.Random;
namespace Storage.Benchmark;
[SimpleJob(RuntimeMoniker.Net60)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
[SimpleJob(RuntimeMoniker.Net48)]
[CategoriesColumn, MeanColumn]
[GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByJob)]
public class ArrayReadWriteBenchmark
{
[Benchmark]
public int ForeachCustom()
{
var sum = 0;
foreach (ref var element in new ArrayEnumerator<int>(_array))
{
sum += element;
element = sum;
}
return sum;
}
[Benchmark(Baseline = true)]
public int ForeachSpan()
{
var sum = 0;
foreach (ref var element in _array.AsSpan())
{
sum += element;
element = sum;
}
return sum;
}
[Benchmark]
public int Reference()
{
var sum = 0;
for (var i = 0; i < _array.Length; i++)
{
ref var element = ref _array[i];
sum += element;
element = sum;
}
return sum;
}
[Benchmark]
public int Terrible()
{
var sum = 0;
for (var i = 0; i < _array.Length; i++)
{
sum += _array[i];
_array[i] = sum;
}
return sum;
}
[Benchmark]
public unsafe int Unsafe()
{
var length = _array.Length;
var sum = 0;
fixed (int* arrayPtr = &_array[0])
{
// ReSharper disable once TooWideLocalVariableScope
int* elementPtr;
for (var i = 0; i < length; i++)
{
elementPtr = arrayPtr + i;
sum += *elementPtr;
*elementPtr = sum;
}
}
return sum;
}
#region Configuration
private int[] _array = null!;
[GlobalSetup]
public void Init()
{
const int count = 1021;
_array = new int[count];
var rnd = new Random(1234);
for (var i = 0; i < count; i++)
{
_array[i] = rnd.Next(0, 10);
}
}
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment