Created
June 8, 2023 18:36
-
-
Save teoadal/fbf06ac7d8216275780f21d8094e5eba 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
using System.Collections.Generic; | |
using BenchmarkDotNet.Attributes; | |
using BenchmarkDotNet.Jobs; | |
using Benchmarks.Mocks; | |
namespace Benchmarks; | |
[SimpleJob(RuntimeMoniker.Net70)] | |
[MeanColumn, MemoryDiagnoser] | |
public class ListInitializerBenchmark | |
{ | |
[Benchmark] | |
public int AddRange() | |
{ | |
var list = new List<ClassMock>(); | |
list.AddRange(_values); | |
return list.Count; | |
} | |
[Benchmark] | |
public int AsEnumerable() | |
{ | |
var list = new List<ClassMock>(_values); | |
return list.Count; | |
} | |
[Benchmark(Baseline = true)] | |
public int Initializer() | |
{ | |
var values = _values; | |
var list = new List<ClassMock> | |
{ | |
values[0], | |
values[1], | |
values[2], | |
values[3], | |
values[4], | |
}; | |
return list.Count; | |
} | |
[Benchmark] | |
public int WithoutInitializer() | |
{ | |
var values = _values; | |
var list = new List<ClassMock>(); | |
list.Add(values[0]); | |
list.Add(values[1]); | |
list.Add(values[2]); | |
list.Add(values[3]); | |
list.Add(values[4]); | |
return list.Count; | |
} | |
private ClassMock[] _values = null!; | |
[GlobalSetup] | |
public void Init() | |
{ | |
_values = new ClassMock[5]; | |
for (var i = 0; i < _values.Length; i++) | |
{ | |
_values[i] = new ClassMock( | |
new[] {new object(), new object()}, | |
true, | |
i, | |
new object()); | |
} | |
} | |
} | |
internal sealed class ClassMock | |
{ | |
public readonly object[] Array; | |
public readonly bool Bool; | |
public readonly int Int; | |
public readonly object Obj; | |
public ClassMock(object[] array, bool b, int i, object obj) | |
{ | |
Array = array; | |
Bool = b; | |
Int = i; | |
Obj = obj; | |
} | |
} |
Author
teoadal
commented
Jun 8, 2023
•
Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|
AddRange | 35.61 ns | 0.721 ns | 0.802 ns | 0.81 | 0.02 | 0.0114 | 96 B | 0.55 |
AsEnumerable | 27.76 ns | 0.210 ns | 0.164 ns | 0.63 | 0.02 | 0.0114 | 96 B | 0.55 |
Initializer | 44.03 ns | 0.880 ns | 1.316 ns | 1.00 | 0.00 | 0.0210 | 176 B | 1.00 |
ToList | 31.52 ns | 0.442 ns | 0.414 ns | 0.71 | 0.02 | 0.0114 | 96 B | 0.55 |
WithoutInitializer | 44.39 ns | 0.889 ns | 0.988 ns | 1.01 | 0.03 | 0.0210 | 176 B | 1.00 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment