From 3cfe0b7e79d9728cf5d2c711b6e479cedaec33b5 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Sat, 28 Jan 2023 23:04:55 +0100 Subject: [PATCH] We'll now use Span instead of memory to eliminate 1 more local var. --- Recyclable.Collections/RecyclableList.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Recyclable.Collections/RecyclableList.cs b/Recyclable.Collections/RecyclableList.cs index fc4e9b4..eb7a97c 100644 --- a/Recyclable.Collections/RecyclableList.cs +++ b/Recyclable.Collections/RecyclableList.cs @@ -83,6 +83,7 @@ namespace Recyclable.Collections var sourceBlockCount = source?.Length ?? 0; int requiredBlockCount = (int)(newCapacity / blockSize) + (newCapacity % blockSize > 0 ? 1 : 0); + Span sourceSpan; Span newArraySpan; T[][] newMemoryBlocks = requiredBlockCount >= RecyclableDefaults.MinPooledArrayLength ? arrayPool.Rent(requiredBlockCount) @@ -94,15 +95,15 @@ namespace Recyclable.Collections switch (sourceBlockCount > 0) { case true: - Memory sourceMemory = new(source); - Memory newArrayMemory = new(newMemoryBlocks); - sourceMemory.CopyTo(newArrayMemory); - if (sourceMemory.Length >= RecyclableDefaults.MinPooledArrayLength) + sourceSpan = new Span(source); + newArraySpan = new Span(newMemoryBlocks); + sourceSpan.CopyTo(newArraySpan); + if (sourceSpan.Length >= RecyclableDefaults.MinPooledArrayLength) { arrayPool.Return(source!); } - newArraySpan = new Span(newMemoryBlocks)[sourceBlockCount..]; + newArraySpan = newArraySpan[sourceBlockCount..]; break; case false: @@ -151,7 +152,7 @@ namespace Recyclable.Collections return newMemoryBlocks; case false: - var sourceSpan = new Span(source)[..requiredBlockCount]; + sourceSpan = new Span(source)[..requiredBlockCount]; newArraySpan = new Span(newMemoryBlocks); sourceSpan.CopyTo(newArraySpan); sourceSpan = new Span(source)[newArraySpan.Length..];