void AllocateBuffers(int count, Queue <byte[]> bufferQueue, int bufferSize) { while (count-- > 0) { byte[] buffer = new byte[bufferSize]; bufferQueue.Enqueue(buffer); lock (AllocatedBuffers) AllocatedBuffers.Add(buffer); } }
public byte[] Rent(int minCapacity) { if (minCapacity <= SmallMessageBufferSize) { return(Rent(SmallMessageBuffers, SmallMessageBufferSize)); } if (minCapacity <= MediumMessageBufferSize) { return(Rent(MediumMessageBuffers, MediumMessageBufferSize)); } if (minCapacity <= LargeMessageBufferSize) { return(Rent(LargeMessageBuffers, LargeMessageBufferSize)); } lock (MassiveBuffers) { byte[] buffer; for (int i = 0; i < MassiveBuffers.Count; i++) { if ((buffer = MassiveBuffers.Dequeue()).Length >= minCapacity) { return(buffer); } else { MassiveBuffers.Enqueue(buffer); } } buffer = new byte[minCapacity]; lock (AllocatedBuffers) AllocatedBuffers.Add(buffer); return(buffer); } }
public bool Owns(byte[] buffer) { lock (AllocatedBuffers) return(AllocatedBuffers.Contains(buffer)); }