Browse Source

memory clearing should not be UniformUnmanagedMemoryPool concern

af/UniformUnmanagedMemoryPoolMemoryAllocator-02-MemoryGuards
Anton Firszov 5 years ago
parent
commit
aadaefa800
  1. 7
      src/ImageSharp/Memory/Allocators/Internals/UniformUnmanagedMemoryPool.cs
  2. 15
      src/ImageSharp/Memory/Allocators/UniformUnmanagedMemoryPoolMemoryAllocator.cs

7
src/ImageSharp/Memory/Allocators/Internals/UniformUnmanagedMemoryPool.cs

@ -52,7 +52,7 @@ namespace SixLabors.ImageSharp.Memory.Internals
public int Capacity { get; }
public UnmanagedMemoryHandle Rent(AllocationOptions allocationOptions = AllocationOptions.None)
public UnmanagedMemoryHandle Rent()
{
UnmanagedMemoryHandle[] buffersLocal = this.buffers;
@ -81,11 +81,6 @@ namespace SixLabors.ImageSharp.Memory.Internals
buffer = UnmanagedMemoryHandle.Allocate(this.BufferLength);
}
if (allocationOptions.Has(AllocationOptions.Clean))
{
this.GetSpan(buffer).Clear();
}
return buffer;
}

15
src/ImageSharp/Memory/Allocators/UniformUnmanagedMemoryPoolMemoryAllocator.cs

@ -98,10 +98,14 @@ namespace SixLabors.ImageSharp.Memory
if (lengthInBytes <= this.poolBufferSizeInBytes)
{
UnmanagedMemoryHandle array = this.pool.Rent(options);
UnmanagedMemoryHandle array = this.pool.Rent();
if (array != null)
{
return new UniformUnmanagedMemoryPool.FinalizableBuffer<T>(this.pool, array, length);
var buffer = new UniformUnmanagedMemoryPool.FinalizableBuffer<T>(this.pool, array, length);
if (options.Has(AllocationOptions.Clean))
{
buffer.Clear();
}
}
}
@ -124,10 +128,15 @@ namespace SixLabors.ImageSharp.Memory
if (totalLengthInBytes <= this.poolBufferSizeInBytes)
{
// Optimized path renting single array from the pool
UnmanagedMemoryHandle array = this.pool.Rent(options);
UnmanagedMemoryHandle array = this.pool.Rent();
if (array != null)
{
var buffer = new UniformUnmanagedMemoryPool.FinalizableBuffer<T>(this.pool, array, (int)totalLength);
if (options.Has(AllocationOptions.Clean))
{
buffer.Clear();
}
return MemoryGroup<T>.CreateContiguous(buffer, options.Has(AllocationOptions.Clean));
}
}

Loading…
Cancel
Save