From ea1d7d91baf52fdd8084044ba3e8329b8bc63135 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Sat, 28 Jan 2023 23:17:30 +0100 Subject: [PATCH] Solutions from RecyclableList.SetNewLength migrated to RecyclableList.SetNewLength. --- Recyclable.Collections/RecyclableArrayList.cs | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Recyclable.Collections/RecyclableArrayList.cs b/Recyclable.Collections/RecyclableArrayList.cs index 6779dc8..794d55b 100644 --- a/Recyclable.Collections/RecyclableArrayList.cs +++ b/Recyclable.Collections/RecyclableArrayList.cs @@ -21,25 +21,36 @@ namespace Recyclable.Collections { ArrayPool arrayPool = _arrayPool; var sourceLength = source?.Length ?? 0; - T[] newMemoryBlock = newSize.RentArrayFromPool(arrayPool); + Span sourceSpan, newArraySpan; + T[] newMemoryBlock = newSize >= RecyclableDefaults.MinPooledArrayLength + ? arrayPool.Rent(newSize) + : new T[newSize]; + switch (newSize >= sourceLength) { case true: if (sourceLength > 0) { - Memory sourceMemory = new(source); - Memory newArrayMemory = new(newMemoryBlock); - sourceMemory.CopyTo(newArrayMemory); - source!.ReturnToPool(arrayPool); + sourceSpan = new Span(source); + newArraySpan = new Span(newMemoryBlock); + sourceSpan.CopyTo(newArraySpan); + if (sourceLength >= RecyclableDefaults.MinPooledArrayLength) + { + arrayPool.Return(source!); + } } return newMemoryBlock; case false: - var sourceSpan = new Span(source)[..newSize]; - Span newArraySpan = new(newMemoryBlock); + sourceSpan = new Span(source)[..newSize]; + newArraySpan = new(newMemoryBlock); sourceSpan.CopyTo(newArraySpan); - source!.ReturnToPool(arrayPool); + if (sourceLength >= RecyclableDefaults.MinPooledArrayLength) + { + arrayPool.Return(source!); + } + return newMemoryBlock; } }