Example #1
0
            public BufferPoolItem ReleaseOne()
            {
                BufferPoolItem item = _obtainedItems.Dequeue();

                _availableItems.Push(item);
                return(item);
            }
Example #2
0
            public BufferPoolItem Obtain(int length)
            {
                BufferPoolItem item = GetAvailableItem(length) ?? new BufferPoolItem(length);

                _obtainedItems.Enqueue(item);
                return(item);
            }
Example #3
0
            public BufferPoolItem Obtain(int length)
            {
                BufferPoolItem item = _availableItems.Count != 0 ? _availableItems.Pop() : new BufferPoolItem();

                item.Length = length;
                _obtainedItems.Enqueue(item);
                return(item);
            }
Example #4
0
            private BufferPoolItem GetAvailableItem(int length)
            {
                int foundIndex = -1;

                for (int i = 0; i < _availableItems.Count; i++)
                {
                    if (_availableItems[i].MaxLength >= length && (foundIndex == -1 || _availableItems[i].MaxLength < _availableItems[foundIndex].MaxLength))
                    {
                        foundIndex = i;
                    }
                }
                if (foundIndex == -1)
                {
                    return(null);
                }
                BufferPoolItem item = _availableItems[foundIndex];

                _availableItems.RemoveAt(foundIndex);
                return(item);
            }