Created
July 28, 2023 11:18
-
-
Save aalmada/c3262f0228c8a8f4b46dd676f290a6c3 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
using System; | |
using System.Collections.Generic; | |
using System.Collections.Immutable; | |
using System.Linq; | |
using System.Runtime.InteropServices; | |
using BenchmarkDotNet.Attributes; | |
public class ForEachReferenceBenchmarks | |
{ | |
string[]? array; | |
List<string>? list; | |
ImmutableArray<string>? immutableArray; | |
[Params(10, 10_000)] | |
public int Count { get; set; } | |
[GlobalSetup] | |
public void GlobalSetup() | |
{ | |
var range = Enumerable.Range(0, Count).Select(x => x.ToString()); | |
array = range.ToArray(); | |
list = range.ToList(); | |
immutableArray = System.Collections.Immutable.ImmutableArray.Create(array); | |
} | |
[Benchmark(Baseline = true)] | |
public int Array() | |
{ | |
var sum = 0; | |
foreach (var item in array!) | |
sum += int.Parse(item); | |
return sum; | |
} | |
[Benchmark] | |
public int Array_AsSpan() | |
{ | |
var sum = 0; | |
foreach (var item in array!.AsSpan()) | |
sum += int.Parse(item); | |
return sum; | |
} | |
[Benchmark] | |
public int List() | |
{ | |
var sum = 0; | |
foreach (var item in list!) | |
sum += int.Parse(item); | |
return sum; | |
} | |
[Benchmark] | |
public int List_AsSpan() | |
{ | |
var sum = 0; | |
foreach (var item in CollectionsMarshal.AsSpan(list!)) | |
sum += int.Parse(item); | |
return sum; | |
} | |
[Benchmark] | |
public int ImmutableArray() | |
{ | |
var sum = 0; | |
foreach (var item in immutableArray!) | |
sum += int.Parse(item); | |
return sum; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment