public BufferPoolItem ReleaseOne() { BufferPoolItem item = _obtainedItems.Dequeue(); _availableItems.Push(item); return(item); }
public BufferPoolItem Obtain(int length) { BufferPoolItem item = GetAvailableItem(length) ?? new BufferPoolItem(length); _obtainedItems.Enqueue(item); return(item); }
public BufferPoolItem Obtain(int length) { BufferPoolItem item = _availableItems.Count != 0 ? _availableItems.Pop() : new BufferPoolItem(); item.Length = length; _obtainedItems.Enqueue(item); return(item); }
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); }