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