Benchmark improvements & fixes to have 1:1 comparison.

This commit is contained in:
mlemanczyk committed 2023-07-08 14:50:15 +02:00
1 parent 4da13cd9c1
commit 571c394f4e
8 files changed
+54 -29

No files matched your search

@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_AddRangeWhenSourceIsArray()
{
var data = TestObjects;
var list = new List<long>();
var list = new List<long>(TestObjectCount);
list.AddRange(data);
}
@@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_AddRangeWhenSourceIsArray()
{
var data = TestObjects;
using var list = new RecyclableList<long>();
using var list = new RecyclableList<long>(TestObjectCount);
list.AddRange(data);
}
@@ -7,7 +7,7 @@ namespace Recyclable.Collections.Benchmarks
public void List_AddRangeWhenSourceIsIEnumerable()
{
var data = TestObjectsAsIEnumerable;
var list = new List<long>();
var list = new List<long>(TestObjectCount);
list.AddRange(data);
}
@@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_AddRangeWhenSourceIsIEnumerable()
{
var data = TestObjectsAsIEnumerable;
using var list = new RecyclableList<long>();
using var list = new RecyclableList<long>(TestObjectCount);
list.AddRange(data);
}
@@ -4,16 +4,22 @@ namespace Recyclable.Collections.Benchmarks
{
public partial class RecyclableCollectionsBenchmarks
{
public void Array_AddRangeWhenSourceIsIList()
{
var data = (IList<long>)TestObjectsAsRecyclableLongList;
data.CopyTo(TestObjects, 0);
}
public void List_AddRangeWhenSourceIsIList()
{
var data = (IList<long>)TestObjectsAsRecyclableLongList;
var list = new List<long>();
var list = new List<long>(TestObjectCount);
list.AddRange(data);
}
public void PooledList_AddRangeWhenSourceIsIList()
{
var data = (IList<long>)TestObjectsAsPooledList;
var data = (IList<long>)TestObjectsAsRecyclableLongList;
using var list = new PooledList<long>(capacity: TestObjectCount, ClearMode.Auto);
list.AddRange(data);
}
@@ -21,7 +27,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_AddRangeWhenSourceIsIList()
{
var data = (IList<long>)TestObjectsAsRecyclableLongList;
using var list = new RecyclableList<long>();
using var list = new RecyclableList<long>(TestObjectCount);
list.AddRange(data);
}
@@ -4,10 +4,16 @@ namespace Recyclable.Collections.Benchmarks
{
public partial class RecyclableCollectionsBenchmarks
{
public void Array_AddRangeWhenSourceIsList()
{
var data = TestObjectsAsList;
data.CopyTo(TestObjects, 0);
}
public void List_AddRangeWhenSourceIsList()
{
var data = TestObjectsAsList;
var list = new List<long>();
var list = new List<long>(TestObjectCount);
list.AddRange(data);
}
@@ -21,7 +27,7 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_AddRangeWhenSourceIsList()
{
var data = TestObjectsAsList;
using var list = new RecyclableList<long>();
using var list = new RecyclableList<long>(TestObjectCount);
list.AddRange(data);
}
@@ -14,11 +14,11 @@ namespace Recyclable.Collections.Benchmarks
public void RecyclableList_AddRangeWhenSourceIsRecyclableList()
{
var data = TestObjectsAsRecyclableList;
using var list = new RecyclableList<long>();
using var list = new RecyclableList<long>(TestObjectCount);
list.AddRange(data);
}
public void RecyclableLongList_AddRangeWhenSourceIsRecyclableList()
public void RecyclableLongList_AddRangeWhenSourceIsRecyclableLongList()
{
var data = TestObjectsAsRecyclableList;
using var list = new RecyclableLongList<long>(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount);
@@ -69,8 +69,21 @@ namespace Recyclable.Collections.Benchmarks
public override RecyclableCollectionsBenchmarkSource DataType { get => base.DataType; set => base.DataType = value; }
protected override Action? GetTestMethod(RecyclableCollectionsBenchmarkSource benchmarkType)
=> (Action?) GetType().GetMethod($"{benchmarkType}_{TestCase}", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)?.CreateDelegate(typeof(Action), this)
?? (Action?)GetType().GetMethod($"{benchmarkType}_AddRangeWhenSourceIs{benchmarkType}", BindingFlags.Instance | BindingFlags.Public)?.CreateDelegate(typeof(Action), this)
?? throw new InvalidOperationException($"Method {benchmarkType}_{TestCase} not found in class {GetType().FullName}");
=> TestCase switch
{
RecyclableCollectionsBenchmarkType.AddRangeWhenSourceIsSameType => (Action?)GetType().GetMethod($"{benchmarkType}_AddRangeWhenSourceIs{benchmarkType}", BindingFlags.Instance | BindingFlags.Public)?.CreateDelegate(typeof(Action), this),
_ => (Action?) GetType().GetMethod($"{benchmarkType}_{TestCase}", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)?.CreateDelegate(typeof(Action), this) ?? throw new InvalidOperationException($"Method {benchmarkType}_{TestCase} not found in class {GetType().FullName}")
};
public override void Setup()
{
base.Setup();
switch(TestCase)
{
case RecyclableCollectionsBenchmarkType.AddRangeWhenSourceIsIList:
PrepareData(RecyclableCollectionsBenchmarkSource.RecyclableLongList);
break;
}
}
}
}
+14 -14
View File
@@ -38,20 +38,20 @@ namespace Recyclable.Collections.Benchmarks
benchmark.Cleanup();
}
static void RunPocBenchmarks()
{
_ = BenchmarkRunner.Run<BoolOrComparePocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<DelegateVsComparerPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<ModuloPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RecyclableLongListPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<TaskRunVsTaskFactoryStartNewBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RefVsInstanceMemberPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<WhenParallelSearchBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RoundBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<SpanVsArrayBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<LessOperatorVsAndOperatorBenchmarks>(BenchmarkConfig);
// ArraySizeLimitPocBenchmarks>(BenchmarkConfig);
}
static void RunPocBenchmarks()
{
_ = BenchmarkRunner.Run<BoolOrComparePocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<DelegateVsComparerPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<ModuloPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RecyclableLongListPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<TaskRunVsTaskFactoryStartNewBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RefVsInstanceMemberPocBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<WhenParallelSearchBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<RoundBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<SpanVsArrayBenchmarks>(BenchmarkConfig);
_ = BenchmarkRunner.Run<LessOperatorVsAndOperatorBenchmarks>(BenchmarkConfig);
// ArraySizeLimitPocBenchmarks>(BenchmarkConfig);
}
static void Main()
{
@@ -7,7 +7,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Platforms>AnyCPU;x64</Platforms>
<StartupObject>Program</StartupObject>
<StartupObject>Recyclable.Collections.Benchmarks.Program</StartupObject>
</PropertyGroup>
<ItemGroup>