diff --git a/src/ImageSharp/Memory/ArrayPoolMemoryManager.cs b/src/ImageSharp/Memory/ArrayPoolMemoryManager.cs index 86f3f0015..80c6e00e3 100644 --- a/src/ImageSharp/Memory/ArrayPoolMemoryManager.cs +++ b/src/ImageSharp/Memory/ArrayPoolMemoryManager.cs @@ -30,16 +30,18 @@ namespace SixLabors.ImageSharp.Memory } /// - internal override Buffer Allocate(int size, bool clear = false) + internal override Buffer Allocate(int itemCount, bool clear = false) { - int itemSize = Unsafe.SizeOf(); - if (this.minSizeBytes > 0 && itemSize < this.minSizeBytes * itemSize) + int itemSizeBytes = Unsafe.SizeOf(); + int bufferSizeInBytes = itemCount * itemSizeBytes; + + if (this.minSizeBytes > 0 && bufferSizeInBytes < this.minSizeBytes) { - return new Buffer(new T[itemSize], itemSize); + return new Buffer(new T[itemCount], itemCount); } - byte[] byteBuffer = this.pool.Rent(itemSize * itemSize); - var buffer = new Buffer(Unsafe.As(byteBuffer), itemSize, this); + byte[] byteBuffer = this.pool.Rent(bufferSizeInBytes); + var buffer = new Buffer(Unsafe.As(byteBuffer), itemCount, this); if (clear) { buffer.Clear();