Last active
March 26, 2024 21:49
-
-
Save israellot/47e717cebc433809ba38cf78160957e7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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