Skip to content

Instantly share code, notes, and snippets.

@NWoodsman
Created November 29, 2023 02:30
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 NWoodsman/2bb2875b020435ee0811f86acd890fd2 to your computer and use it in GitHub Desktop.
Save NWoodsman/2bb2875b020435ee0811f86acd890fd2 to your computer and use it in GitHub Desktop.
.Net ImmutableList<T> Benchmarks
const int SIZE = 1_000_000;
const int HALF_SIZE = 500_000;
[Benchmark]
public void ms_mutable_list()
{
var ms_list = new List<int>();
for (int i = 0; i < SIZE; i++) ms_list.Add(i);
}
[Benchmark]
public void ms_builder_good()
{
var ms_list = ImmutableList<int>.Empty;
var builder = ms_list.ToBuilder();
for (int i = 0; i < SIZE; i++)builder.Add(i);
ms_list = builder.ToImmutableList();
}
[Benchmark]
public void ms_builder_bad()
{
var ms_list = ImmutableList<int>.Empty;
for (int i = 0; i < SIZE; i++)
{
var builder = ms_list.ToBuilder();
builder.Add(i);
ms_list = builder.ToImmutableList();
}
}
[Benchmark]
public void ms_builder_unpack()
{
var ms_list = ImmutableList<int>.Empty;
var builder = ms_list.ToBuilder();
for (int i = 0; i < HALF_SIZE; i++) builder.Add(i);
ms_list = builder.ToImmutableList();
builder = ms_list.ToBuilder();
for (int i = HALF_SIZE; i < SIZE; i++) builder.Add(i);
ms_list = builder.ToImmutableList();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment