From 948156b89768b5c36dc1037e70b1a974cc9e4cd0 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Mon, 1 May 2023 11:48:48 +0200 Subject: [PATCH] RecyclableList.IndexOf performance improvements. --- Recyclable.Collections/RecyclableList.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Recyclable.Collections/RecyclableList.cs b/Recyclable.Collections/RecyclableList.cs index 227708a..c602722 100644 --- a/Recyclable.Collections/RecyclableList.cs +++ b/Recyclable.Collections/RecyclableList.cs @@ -275,10 +275,10 @@ namespace Recyclable.Collections //? Array.IndexOf(memoryBlocks[blockIndex], itemToFind, 0, checked((int)Math.Min(itemRange.List._nextItemIndex, itemsToSearchCount))) //: Array.IndexOf(memoryBlocks[blockIndex], itemToFind, 0, checked((int)Math.Min(blockSize, itemsToSearchCount))); - return index >= 0 ? ((long)blockIndex << list._blockSizePow2BitShift) + index : ItemNotFoundIndexLong; + return !itemFoundSignal.IsSet && index >= 0 ? ((long)blockIndex << list._blockSizePow2BitShift) + index : ItemNotFoundIndexLong; } - [MethodImpl(MethodImplOptions.AggressiveOptimization)] + [MethodImpl(MethodImplOptions.AggressiveOptimization | MethodImplOptions.AggressiveInlining)] private long DoIndexOfParallel(T item) { using var itemFoundSignal = ManualResetEventSlimmer.Create(false); @@ -980,10 +980,7 @@ namespace Recyclable.Collections [MethodImpl(MethodImplOptions.AggressiveInlining)] public int IndexOf(T item) => _longCount == 0 ? ItemNotFoundIndex - // Optimization for tiny collections to avoid any vars etc. - : _longCount <= _blockSize - ? Array.IndexOf(_memoryBlocks[0], item, 0, (int)_longCount) - : checked((int)DoIndexOfParallel(item)); + : checked((int)DoIndexOfParallel(item)); public void Insert(int index, T item) => throw new NotSupportedException();