using BenchmarkDotNet.Running;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Toolchains.InProcess.Emit;
using BenchmarkDotNet.Loggers;
using Perfolizer.Horology;
[assembly: System.Diagnostics.Debuggable(isJITTrackingEnabled: false, isJITOptimizerDisabled: false)]
BenchmarkRunner.Run<Benchmark>(DefaultConfig.Instance
.WithToolchain(new InProcessEmitToolchain(
timeout: TimeSpan.FromSeconds(30),
.WithIterationTime(TimeInterval.FromMilliseconds(20)))
.AddLogger(new ConsoleLogger(unicodeSupport: true, ConsoleLogger.CreateGrayScheme()))
.WithOptions(ConfigOptions.DisableLogFile));
private const int N = 500;
private int[] array1D = new int[N*N];
private int[,] arrayMultiDim = new int[N,N];
private int[][] arrayJagged = new int[N][];
private Random rnd = new Random();
private const int nbIndexToBenchmark = 1000000;
private (int, int)[] indexToBenchmark = new (int, int)[nbIndexToBenchmark];
for(int i = 0; i < N ; i++)
arrayJagged[i] = new int[N];
for(int j = 0; j < N ; j++)
for(int i = 0; i < nbIndexToBenchmark ; i++)
indexToBenchmark[i] = (rnd.Next(N), rnd.Next(N));
public void ReadArray1D()
foreach((int i, int j) in indexToBenchmark)
var a = array1D[i*N + j];
var b = array1D[j*N + i];
public void ReadArrayMultiDim()
foreach((int i, int j) in indexToBenchmark)
var a = arrayMultiDim[i,j];
var b = arrayMultiDim[j,i];
public void ReadArrayJagged()
foreach((int i, int j) in indexToBenchmark)
var a = arrayJagged[i][j];
var b = arrayJagged[j][i];