Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 public bool Owns(byte[] buffer)
 {
     lock (AllocatedBuffers)
         return(AllocatedBuffers.Contains(buffer));
 }