Skip to content

Instantly share code, notes, and snippets.

@aalmada
Created July 28, 2023 11:18
Show Gist options
  • Save aalmada/c3262f0228c8a8f4b46dd676f290a6c3 to your computer and use it in GitHub Desktop.
Save aalmada/c3262f0228c8a8f4b46dd676f290a6c3 to your computer and use it in GitHub Desktop.
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