Browse Source

using WeakReference in ArrayPoolMemoryManager.Buffer

af/merge-core
Anton Firszov 8 years ago
parent
commit
c792b03279
  1. 13
      src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs

13
src/ImageSharp/Memory/ArrayPoolMemoryManager.Buffer{T}.cs

@ -16,13 +16,13 @@ namespace SixLabors.ImageSharp.Memory
{ {
private readonly int length; private readonly int length;
private readonly ArrayPool<byte> sourcePool; private WeakReference<ArrayPool<byte>> sourcePoolReference;
public Buffer(byte[] data, int length, ArrayPool<byte> sourcePool) public Buffer(byte[] data, int length, ArrayPool<byte> sourcePool)
{ {
this.Data = data; this.Data = data;
this.length = length; this.length = length;
this.sourcePool = sourcePool; this.sourcePoolReference = new WeakReference<ArrayPool<byte>>(sourcePool);
} }
protected byte[] Data { get; private set; } protected byte[] Data { get; private set; }
@ -31,12 +31,17 @@ namespace SixLabors.ImageSharp.Memory
public void Dispose() public void Dispose()
{ {
if (this.Data == null) if (this.Data == null || this.sourcePoolReference == null)
{ {
return; return;
} }
this.sourcePool.Return(this.Data); if (this.sourcePoolReference.TryGetTarget(out ArrayPool<byte> pool))
{
pool.Return(this.Data);
}
this.sourcePoolReference = null;
this.Data = null; this.Data = null;
} }
} }

Loading…
Cancel
Save