Additional, optimized constructors & AddRange variants added to RecyclableArrayList. Benchmarks extended.

This commit is contained in:
mlemanczyk committed 2023-01-15 12:24:00 +01:00
1 parent 878ec4924a
commit c48b4e2f56
12 files changed
+486 -77

No files matched your search

@@ -18,14 +18,27 @@ namespace Recyclable.Collections.Benchmarks
private class TestCase
{
private int[] _items = new int[123];
private int _count = 123;
private int Add(int count)
{
return count;
}
public int Count
{
get => _count;
set => _count = value;
}
public ref int GetRefCount()
public ref int GetCountAsRefCount2()
{
ref int count = ref _count;
count = 234;
return ref count;
}
public ref int GetCountAsRefCount3()
{
ref int count = ref _count;
count = 234;
@@ -33,30 +46,299 @@ namespace Recyclable.Collections.Benchmarks
return ref count;
}
private int Add(int count)
public ref int GetCountAsRefCount4()
{
return count;
ref int count = ref _count;
count = 234;
_ = Add(count);
_ = Add(count);
return ref count;
}
public int GetCount()
public ref int GetCountAsRefCount5()
{
ref int count = ref _count;
count = 234;
_ = Add(count);
_ = Add(count);
_ = Add(count);
return ref count;
}
public int GetCountAsInstanceMember2()
{
_count = 234;
return _count;
}
public int GetCountAsInstanceMember3()
{
_count = 234;
_ = Add(_count);
return _count;
}
public int GetCountAsInstanceMember4()
{
_count = 234;
_ = Add(_count);
_ = Add(_count);
return _count;
}
public int GetCountAsInstanceMember5()
{
_count = 234;
_ = Add(_count);
_ = Add(_count);
_ = Add(_count);
return _count;
}
public int GetLengthAsArray2()
{
_ = Add(_items.Length);
return _items.Length;
}
public int GetLengthAsArray3()
{
_ = Add(_items.Length);
_ = Add(_items.Length);
return _items.Length;
}
public int GetLengthAsArray4()
{
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
return _items.Length;
}
public int GetLengthAsArray5()
{
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
return _items.Length;
}
public int GetLengthAsArray6()
{
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
_ = Add(_items.Length);
return _items.Length;
}
public int GetLengthAsArrayLocalVar5()
{
var items = _items;
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsArrayLocalVar6()
{
var items = _items;
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsRefArray2()
{
ref int[] items = ref _items;
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsRefArray3()
{
ref int[] items = ref _items;
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsRefArray4()
{
ref int[] items = ref _items;
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsRefArray5()
{
ref int[] items = ref _items;
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
public int GetLengthAsRefArray6()
{
ref int[] items = ref _items;
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
_ = Add(items.Length);
return items.Length;
}
}
[Benchmark]
public void Ref()
public void RefToInt2()
{
var count = _testCase.GetRefCount();
var count = _testCase.GetCountAsRefCount2();
DoNothing(count);
}
[Benchmark]
public void RefToInt3()
{
var count = _testCase.GetCountAsRefCount3();
DoNothing(count);
}
[Benchmark]
public void RefToInt4()
{
var count = _testCase.GetCountAsRefCount4();
DoNothing(count);
}
[Benchmark]
public void RefToInt5()
{
var count = _testCase.GetCountAsRefCount5();
DoNothing(count);
}
[Benchmark(Baseline = true)]
public void InstanceMember()
public void IntInstanceMember2()
{
var count = _testCase.GetCount();
var count = _testCase.GetCountAsInstanceMember2();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void IntInstanceMember3()
{
var count = _testCase.GetCountAsInstanceMember3();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void IntInstanceMember4()
{
var count = _testCase.GetCountAsInstanceMember4();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void IntInstanceMember5()
{
var count = _testCase.GetCountAsInstanceMember5();
DoNothing(count);
}
[Benchmark]
public void RefToArray2()
{
var count = _testCase.GetLengthAsRefArray2();
DoNothing(count);
}
[Benchmark]
public void RefToArray3()
{
var count = _testCase.GetLengthAsRefArray3();
DoNothing(count);
}
[Benchmark]
public void RefToArray4()
{
var count = _testCase.GetLengthAsRefArray4();
DoNothing(count);
}
[Benchmark]
public void RefToArray5()
{
var count = _testCase.GetLengthAsRefArray5();
DoNothing(count);
}
[Benchmark]
public void RefToArray6()
{
var count = _testCase.GetLengthAsRefArray6();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMember2()
{
var count = _testCase.GetLengthAsArray2();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMember3()
{
var count = _testCase.GetLengthAsArray3();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMember4()
{
var count = _testCase.GetLengthAsArray4();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMember5()
{
var count = _testCase.GetLengthAsArray5();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMember6()
{
var count = _testCase.GetLengthAsArray6();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMemberLocalVar5()
{
var count = _testCase.GetLengthAsArrayLocalVar5();
DoNothing(count);
}
[Benchmark(Baseline = false)]
public void ArrayInstanceMemberLocalVar6()
{
var count = _testCase.GetLengthAsArrayLocalVar6();
DoNothing(count);
}
}