From c45af6a88448bda314f3e0b1f39ea714a0f52c09 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Sun, 30 Apr 2023 21:01:28 +0200 Subject: [PATCH] Test data item type changed to "long" for performance reasons. --- .../BenchmarkBase.cs | 20 +++++++++--------- .../Benchmarks/Add.cs | 8 +++---- .../Benchmarks/AddRangeWhenSourceIsArray.cs | 8 +++---- .../AddRangeWhenSourceIsIEnumerable.cs | 8 +++---- .../Benchmarks/AddRangeWhenSourceIsIList.cs | 16 +++++++------- .../Benchmarks/AddRangeWhenSourceIsList.cs | 8 +++---- .../AddRangeWhenSourceIsSameType.cs | 6 +++--- .../Benchmarks/AddRange_WithCapacity.cs | 8 +++---- .../Benchmarks/Add_WithCapacity.cs | 8 +++---- .../Benchmarks/Create.cs | 8 +++---- .../Benchmarks/Create_WithCapacity.cs | 10 ++++----- .../Benchmarks/GetItem..cs | 6 +++--- .../RecyclableCollections.Benchmarks.cs | 20 +++++++++--------- .../Benchmarks/RemoveAt_FirstItems.cs | 8 +++---- .../Benchmarks/RemoveAt_LastItems.cs | 8 +++---- .../Benchmarks/Remove_FirstItems.cs | 8 +++---- .../Benchmarks/Remove_LastItems.cs | 8 +++---- .../POC/ArraySizeLimitPoc.Benchmarks.cs | 7 +++---- .../POC/PocBenchmarkBase.cs | 2 +- ...clableListPoc.Benchmarks.EnsureCapacity.cs | 21 +++++++++---------- 20 files changed, 97 insertions(+), 99 deletions(-) diff --git a/Recyclable.Collections.Benchmarks/BenchmarkBase.cs b/Recyclable.Collections.Benchmarks/BenchmarkBase.cs index 874f783..2d078c6 100644 --- a/Recyclable.Collections.Benchmarks/BenchmarkBase.cs +++ b/Recyclable.Collections.Benchmarks/BenchmarkBase.cs @@ -4,23 +4,23 @@ namespace Recyclable.Collections.Benchmarks { public class BenchmarkBase : PocBenchmarkBase { - protected object[]? _testObjects; - protected object[] TestObjects => _testObjects ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); + protected long[]? _testObjects; + protected long[] TestObjects => _testObjects ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); - protected List? _testObjectsAsList; - protected List TestObjectsAsList => _testObjectsAsList ?? throw new NullReferenceException("Something went wront and the field is not initialized"); + protected List? _testObjectsAsList; + protected List TestObjectsAsList => _testObjectsAsList ?? throw new NullReferenceException("Something went wront and the field is not initialized"); - protected RecyclableArrayList? _testObjectsAsRecyclableArrayList; - protected RecyclableArrayList TestObjectsAsRecyclableArrayList => _testObjectsAsRecyclableArrayList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); - protected RecyclableList? _testObjectsAsRecyclableList; - protected RecyclableList TestObjectsAsRecyclableList => _testObjectsAsRecyclableList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); - protected IEnumerable TestObjectsAsIEnumerable + protected RecyclableArrayList? _testObjectsAsRecyclableArrayList; + protected RecyclableArrayList TestObjectsAsRecyclableArrayList => _testObjectsAsRecyclableArrayList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); + protected RecyclableList? _testObjectsAsRecyclableList; + protected RecyclableList TestObjectsAsRecyclableList => _testObjectsAsRecyclableList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); + protected IEnumerable TestObjectsAsIEnumerable { get { for (long i = 0; i < TestObjectCount; i++) { - yield return new object(); + yield return i; } } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Add.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Add.cs index ed6b624..e881a81 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Add.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Add.cs @@ -10,7 +10,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - var list = new List(); + var list = new List(); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -22,7 +22,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new PooledList(ClearMode.Always); + using var list = new PooledList(ClearMode.Auto); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -34,7 +34,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -46,7 +46,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableList(); + using var list = new RecyclableList(); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs index 895ea47..f0ea17a 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsArray.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_AddRangeWhenSourceIsArray() { var data = TestObjects; - var list = new List(); + var list = new List(); list.AddRange(data); } @@ -17,7 +17,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_AddRangeWhenSourceIsArray() { var data = TestObjects; - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } @@ -25,7 +25,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_AddRangeWhenSourceIsArray() { var data = TestObjects; - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); list.AddRange(data); } @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsArray() { var data = TestObjects; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs index 8b1fc99..aebf532 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIEnumerable.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - var list = new List(); + var list = new List(); list.AddRange(data); } @@ -17,7 +17,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } @@ -25,7 +25,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); list.AddRange(data); } @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsIEnumerable() { var data = TestObjectsAsIEnumerable; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs index 271f04d..a7bff76 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsIList.cs @@ -8,32 +8,32 @@ namespace Recyclable.Collections.Benchmarks //[Benchmark(Baseline = false)] public void List_AddRangeWhenSourceIsIList() { - var data = (IList)TestObjectsAsRecyclableList; - var list = new List(); + var data = (IList)TestObjectsAsRecyclableList; + var list = new List(); list.AddRange(data); } //[Benchmark(Baseline = true)] public void PooledList_AddRangeWhenSourceIsIList() { - var data = (IList)TestObjectsAsPooledList; - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + var data = (IList)TestObjectsAsPooledList; + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } //[Benchmark(Baseline = false)] public void RecyclableArrayList_AddRangeWhenSourceIsIList() { - var data = (IList)TestObjectsAsRecyclableList; - using var list = new RecyclableArrayList(); + var data = (IList)TestObjectsAsRecyclableList; + using var list = new RecyclableArrayList(); list.AddRange(data); } //[Benchmark(Baseline = false)] public void RecyclableList_AddRangeWhenSourceIsIList() { - var data = (IList)TestObjectsAsRecyclableList; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + var data = (IList)TestObjectsAsRecyclableList; + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs index 12b34cf..92178ec 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsList.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - var list = new List(); + var list = new List(); list.AddRange(data); } @@ -17,7 +17,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } @@ -25,7 +25,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); list.AddRange(data); } @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsList() { var data = TestObjectsAsList; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs index 6fd6e49..6133b30 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRangeWhenSourceIsSameType.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_AddRangeWhenSourceIsPooledList() { var data = TestObjectsAsPooledList; - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); list.AddRange(data); } @@ -17,7 +17,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_AddRangeWhenSourceIsRecyclableArrayList() { var data = TestObjectsAsRecyclableArrayList; - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); list.AddRange(data); } @@ -25,7 +25,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_AddRangeWhenSourceIsRecyclableArrayList() { var data = TestObjectsAsRecyclableArrayList; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/AddRange_WithCapacity.cs b/Recyclable.Collections.Benchmarks/Benchmarks/AddRange_WithCapacity.cs index 1fc85d3..70c2080 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/AddRange_WithCapacity.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/AddRange_WithCapacity.cs @@ -10,7 +10,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - var list = new List(checked((int)dataCount)); + var list = new List(dataCount); list.AddRange(data); } @@ -19,7 +19,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new PooledList(capacity: checked((int)dataCount), ClearMode.Always); + using var list = new PooledList(capacity: dataCount, ClearMode.Auto); list.AddRange(data); } @@ -28,7 +28,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableArrayList(checked((int)dataCount)); + using var list = new RecyclableArrayList(dataCount); list.AddRange(data); } @@ -37,7 +37,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: dataCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: dataCount); list.AddRange(data); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Add_WithCapacity.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Add_WithCapacity.cs index 8ecfdaf..1509649 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Add_WithCapacity.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Add_WithCapacity.cs @@ -10,7 +10,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - var list = new List(checked((int)dataCount)); + var list = new List(dataCount); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -22,7 +22,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new PooledList(capacity: checked((int)dataCount), ClearMode.Always); + using var list = new PooledList(capacity: dataCount, ClearMode.Auto); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -34,7 +34,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableArrayList(checked((int)dataCount)); + using var list = new RecyclableArrayList(dataCount); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); @@ -46,7 +46,7 @@ namespace Recyclable.Collections.Benchmarks { var data = TestObjects; var dataCount = TestObjectCount; - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: dataCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: dataCount); for (var i = 0; i < dataCount; i++) { list.Add(data[i]); diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Create.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Create.cs index d0f5a46..6574f42 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Create.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Create.cs @@ -8,28 +8,28 @@ namespace Recyclable.Collections.Benchmarks //[Benchmark(Baseline = false)] public void List_Create() { - var list = new List(); + var list = new List(); DoNothing(list); } //[Benchmark(Baseline = true)] public void PooledList_Create() { - using var list = new PooledList(ClearMode.Always); + using var list = new PooledList(ClearMode.Auto); DoNothing(list); } //[Benchmark(Baseline = false)] public void RecyclableArrayList_Create() { - using var list = new RecyclableArrayList(); + using var list = new RecyclableArrayList(); DoNothing(list); } //[Benchmark(Baseline = false)] public void RecyclableList_Create() { - using var list = new RecyclableList(); + using var list = new RecyclableList(); DoNothing(list); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Create_WithCapacity.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Create_WithCapacity.cs index 1317ae0..7d43835 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Create_WithCapacity.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Create_WithCapacity.cs @@ -8,35 +8,35 @@ namespace Recyclable.Collections.Benchmarks //[Benchmark(Baseline = false)] public void Array_Create_WithCapacity() { - var data = new object[TestObjectCount]; + var data = new long[TestObjectCount]; DoNothing(data); } //[Benchmark(Baseline = false)] public void List_Create_WithCapacity() { - var list = new List(checked((int)TestObjectCount)); + var list = new List(TestObjectCount); DoNothing(list); } //[Benchmark(Baseline = true)] public void PooledList_Create_WithCapacity() { - using var list = new PooledList(capacity: checked((int)TestObjectCount), ClearMode.Always); + using var list = new PooledList(capacity: TestObjectCount, ClearMode.Auto); DoNothing(list); } //[Benchmark(Baseline = false)] public void RecyclableArrayList_Create_WithCapacity() { - using var list = new RecyclableArrayList(checked((int)TestObjectCount)); + using var list = new RecyclableArrayList(TestObjectCount); DoNothing(list); } //[Benchmark(Baseline = false)] public void RecyclableList_Create_WithCapacity() { - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); DoNothing(list); } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/GetItem..cs b/Recyclable.Collections.Benchmarks/Benchmarks/GetItem..cs index 2b99bf2..db56607 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/GetItem..cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/GetItem..cs @@ -66,10 +66,10 @@ namespace Recyclable.Collections.Benchmarks int blockSize = data.BlockSize; int nextItemBlockIndex = data.NextItemBlockIndex; - var memoryBlocks = new Span(data.AsArray, 0, data.LastBlockWithData + 1); + var memoryBlocks = new Span(data.AsArray, 0, data.LastBlockWithData + 1); for (var blockIndex = 0; blockIndex < nextItemBlockIndex; blockIndex++) { - var memoryBlock = new Span(memoryBlocks[blockIndex], 0, blockSize); + var memoryBlock = new Span(memoryBlocks[blockIndex], 0, blockSize); for (var itemIndex = 0; itemIndex < blockSize; itemIndex++) { DoNothing(memoryBlock[itemIndex]); @@ -79,7 +79,7 @@ namespace Recyclable.Collections.Benchmarks if (nextItemBlockIndex == data.LastBlockWithData) { - var memoryBlock = new Span(memoryBlocks[nextItemBlockIndex], 0, data.NextItemIndex); + var memoryBlock = new Span(memoryBlocks[nextItemBlockIndex], 0, data.NextItemIndex); for (var itemIndex = 0; itemIndex < memoryBlock.Length; itemIndex++) { DoNothing(memoryBlock[itemIndex]); diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs b/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs index 2b2ca80..1be4904 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/RecyclableCollections.Benchmarks.cs @@ -6,32 +6,32 @@ namespace Recyclable.Collections.Benchmarks [MemoryDiagnoser] public partial class RecyclableCollectionsBenchmarks : BenchmarkBase { - private object[] _testArray; - private RecyclableArrayList _testRecyclableArrayList; - private RecyclableList _testRecyclableList; - private PooledList _testPooledList; + private long[] _testArray; + private RecyclableArrayList _testRecyclableArrayList; + private RecyclableList _testRecyclableList; + private PooledList _testPooledList; - public PooledList TestObjectsAsPooledList => _testPooledList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); + public PooledList TestObjectsAsPooledList => _testPooledList ?? throw new NullReferenceException("Something is wrong and the field is not initialized"); [GlobalSetup] public void Setup() { Console.WriteLine("******* GLOBAL SETUP RAISED *******"); _testObjects = EnumerateTestObjects().ToArray(); - _testRecyclableArrayList = new(TestObjects, initialCapacity: checked((int)TestObjectCount)); - _testRecyclableList = new(TestObjects, BlockSize, expectedItemsCount: checked((int)TestObjectCount)); + _testRecyclableArrayList = new(TestObjects, initialCapacity: TestObjectCount); + _testRecyclableList = new(TestObjects, BlockSize, expectedItemsCount: TestObjectCount); _testArray = TestObjects.ToArray(); _testObjectsAsList = TestObjects.ToList(); _testObjectsAsRecyclableArrayList = TestObjects.ToRecyclableArrayList(); _testObjectsAsRecyclableList = TestObjects.ToRecyclableList(); - _testPooledList = new PooledList(TestObjects, ClearMode.Always); + _testPooledList = new PooledList(TestObjects, ClearMode.Always); } - private IEnumerable EnumerateTestObjects() + private IEnumerable EnumerateTestObjects() { for (long i = 0; i < TestObjectCount; i++) { - yield return new object(); + yield return i; } } diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_FirstItems.cs b/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_FirstItems.cs index e6fed8e..ddb0f98 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_FirstItems.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_FirstItems.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_RemoveAt_FirstItems() { var data = TestObjects; - var list = new List(data); + var list = new List(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_RemoveAt_FirstItems() { var data = TestObjects; - using var list = new PooledList(data, ClearMode.Always); + using var list = new PooledList(data, ClearMode.Auto); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_RemoveAt_FirstItems() { var data = TestObjects; - using var list = new RecyclableArrayList(data); + using var list = new RecyclableArrayList(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -45,7 +45,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_RemoveAt_FirstItems() { var data = TestObjects; - using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_LastItems.cs b/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_LastItems.cs index 01ca9be..9d84783 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_LastItems.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/RemoveAt_LastItems.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_RemoveAt_LastItems() { var data = TestObjects; - var list = new List(data); + var list = new List(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_RemoveAt_LastItems() { var data = TestObjects; - using var list = new PooledList(data, ClearMode.Always); + using var list = new PooledList(data, ClearMode.Auto); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_RemoveAt_LastItems() { var data = TestObjects; - using var list = new RecyclableArrayList(data); + using var list = new RecyclableArrayList(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -45,7 +45,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_RemoveAt_LastItems() { var data = TestObjects; - using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Remove_FirstItems.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Remove_FirstItems.cs index a771bae..e53045a 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Remove_FirstItems.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Remove_FirstItems.cs @@ -9,7 +9,7 @@ namespace Recyclable.Collections.Benchmarks public void List_Remove_FirstItems() { var data = TestObjects; - var list = new List(data); + var list = new List(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -21,7 +21,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_Remove_FirstItems() { var data = TestObjects; - using var list = new PooledList(data, ClearMode.Always); + using var list = new PooledList(data, ClearMode.Auto); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -33,7 +33,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_Remove_FirstItems() { var data = TestObjects; - using var list = new RecyclableArrayList(data); + using var list = new RecyclableArrayList(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { @@ -45,7 +45,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_Remove_FirstItems() { var data = TestObjects; - using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = 0; i < dataCount; i++) { diff --git a/Recyclable.Collections.Benchmarks/Benchmarks/Remove_LastItems.cs b/Recyclable.Collections.Benchmarks/Benchmarks/Remove_LastItems.cs index 2070bc5..571d56a 100644 --- a/Recyclable.Collections.Benchmarks/Benchmarks/Remove_LastItems.cs +++ b/Recyclable.Collections.Benchmarks/Benchmarks/Remove_LastItems.cs @@ -10,7 +10,7 @@ namespace Recyclable.Collections.Benchmarks public void List_Remove_LastItems() { var data = TestObjects; - var list = new List(data); + var list = new List(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -22,7 +22,7 @@ namespace Recyclable.Collections.Benchmarks public void PooledList_Remove_LastItems() { var data = TestObjects; - using var list = new PooledList(data, ClearMode.Always); + using var list = new PooledList(data, ClearMode.Auto); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -34,7 +34,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableArrayList_Remove_LastItems() { var data = TestObjects; - using var list = new RecyclableArrayList(data); + using var list = new RecyclableArrayList(data); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { @@ -46,7 +46,7 @@ namespace Recyclable.Collections.Benchmarks public void RecyclableList_Remove_LastItems() { var data = TestObjects; - using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableList(data, minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); var dataCount = TestObjectCount / 10 > 0 ? TestObjectCount / 10 : TestObjectCount; for (var i = data.Length - 1; i > data.Length - dataCount - 1; i--) { diff --git a/Recyclable.Collections.Benchmarks/POC/ArraySizeLimitPoc.Benchmarks.cs b/Recyclable.Collections.Benchmarks/POC/ArraySizeLimitPoc.Benchmarks.cs index 69343bc..222a4a9 100644 --- a/Recyclable.Collections.Benchmarks/POC/ArraySizeLimitPoc.Benchmarks.cs +++ b/Recyclable.Collections.Benchmarks/POC/ArraySizeLimitPoc.Benchmarks.cs @@ -13,17 +13,16 @@ namespace Recyclable.Collections.Benchmarks.POC private const int _maxArraySize = 2_147_483_605; - [Benchmark(OperationsPerInvoke = 1)] public void Max_Allowed_Size_2_147_483_605() { - var arr = ArrayPool.Shared.Rent(_maxArraySize); + var arr = ArrayPool.Shared.Rent(_maxArraySize); } [Benchmark(OperationsPerInvoke = 1)] public void FindArraySizeLimit() { - var pool = ArrayPool.Shared; + var pool = ArrayPool.Shared; var bufferSize = int.MaxValue / 2; var oldValue = 0; while (true) @@ -31,7 +30,7 @@ namespace Recyclable.Collections.Benchmarks.POC try { Console.Write($"Allocating {bufferSize}..."); - var arr = pool.Rent((int)bufferSize); + var arr = pool.Rent(bufferSize); Console.WriteLine("success"); pool.Return(arr); arr = null; diff --git a/Recyclable.Collections.Benchmarks/POC/PocBenchmarkBase.cs b/Recyclable.Collections.Benchmarks/POC/PocBenchmarkBase.cs index 552979a..88bc0cc 100644 --- a/Recyclable.Collections.Benchmarks/POC/PocBenchmarkBase.cs +++ b/Recyclable.Collections.Benchmarks/POC/PocBenchmarkBase.cs @@ -8,7 +8,7 @@ //[Params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 32, 40, 50, 60, 80, 90, 100, 128, 256, 512, 1024, 2048, 4096, 8192, 1_000_000)] //[Params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 32, 40, 50, 60, 80, 90, 100, 128, 256, 512, 1024, 2048, 4096, 8192, 1_000_000)] - public long TestObjectCount = 1_000_000; + public int TestObjectCount = 1_000_000; //[Params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200)] //[Params(10, 20, 50, 100)] diff --git a/Recyclable.Collections.Benchmarks/POC/RecyclableListPoc.Benchmarks.EnsureCapacity.cs b/Recyclable.Collections.Benchmarks/POC/RecyclableListPoc.Benchmarks.EnsureCapacity.cs index b160456..4601ef0 100644 --- a/Recyclable.Collections.Benchmarks/POC/RecyclableListPoc.Benchmarks.EnsureCapacity.cs +++ b/Recyclable.Collections.Benchmarks/POC/RecyclableListPoc.Benchmarks.EnsureCapacity.cs @@ -1845,47 +1845,46 @@ namespace Recyclable.Collections.Benchmarks.POC #endregion public partial class RecyclableListPocBenchmarks { - [Benchmark(Baseline = false)] public void RecyclableList_EnsureCapacityV1_ByPowOf2() { - using var list = new RecyclableListV1(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + using var list = new RecyclableListV1(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); _ = list.EnsureCapacity(TestObjectCount); } [Benchmark(Baseline = true)] public void RecyclableList_EnsureCapacityV2_ByPowOf2() { - using var list = new RecyclableListV2(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); - _ = RecyclableListV2.EnsureCapacity(list, TestObjectCount); + using var list = new RecyclableListV2(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + _ = RecyclableListV2.EnsureCapacity(list, TestObjectCount); } [Benchmark(Baseline = false)] public void RecyclableList_EnsureCapacity_ByPowOf2() { - using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); - _ = RecyclableList.EnsureCapacity(list, TestObjectCount); + using var list = new RecyclableList(minBlockSize: BlockSize, expectedItemsCount: TestObjectCount); + _ = RecyclableList.EnsureCapacity(list, TestObjectCount); } [Benchmark(Baseline = false)] public void RecyclableList_EnsureCapacityV1_ByBlockSize() { - using var list = new RecyclableListV1(); + using var list = new RecyclableListV1(); _ = list.EnsureCapacity(TestObjectCount); } [Benchmark(Baseline = false)] public void RecyclableList_EnsureCapacityV2_ByBlockSize() { - using var list = new RecyclableListV2(); - _ = RecyclableListV2.EnsureCapacity(list, TestObjectCount); + using var list = new RecyclableListV2(); + _ = RecyclableListV2.EnsureCapacity(list, TestObjectCount); } [Benchmark(Baseline = false)] public void RecyclableList_EnsureCapacity_ByBlockSize() { - using var list = new RecyclableList(); - _ = RecyclableList.EnsureCapacity(list, TestObjectCount); + using var list = new RecyclableList(); + _ = RecyclableList.EnsureCapacity(list, TestObjectCount); } } }