Skip to content

Instantly share code, notes, and snippets.

@israellot
Last active March 26, 2024 21:49
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 israellot/47e717cebc433809ba38cf78160957e7 to your computer and use it in GitHub Desktop.
Save israellot/47e717cebc433809ba38cf78160957e7 to your computer and use it in GitHub Desktop.
[DisassemblyDiagnoser(maxDepth: 100)]
public class RandomRead
{
[Params(64, 256, 512, 1024, 4096, 1024 * 16, 1024 * 1024)]
public int ArraySize { get; set; }
private uint[] _safeArray;
private UnsafeUIntArray _unsafeArray;
private int[] _sequence;
public RandomRead()
{
_safeArray = new uint[ArraySize];
_unsafeArray = new UnsafeUIntArray (ArraySize);
_sequence = new int[ArraySize];
}
[GlobalSetup]
public void GlobalSetup()
{
_sequence = new int[ArraySize];
_safeArray = new uint[ArraySize];
_unsafeArray = new UnsafeUIntArray (ArraySize);
var random= new Random(111);
for (var i = 0; i < ArraySize; i++)
{
_sequence[i] = i;
var v = (uint)random.Next();
_safeArray[i] = v;
_unsafeArray[i] = v;
}
random.Shuffle(_sequence);
}
[Benchmark(Baseline = true)]
public uint SafeArray()
{
uint v = 0;
foreach (var i in _sequence)
v += _safeArray[i];
return v;
}
[Benchmark]
public uint UnsafeArray()
{
uint v = 0;
foreach (var i in _sequence)
v += _unsafeArray.Get(i);
return v;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment