private void EnsureCapacity(int newCapacity)
        {
            if (newCapacity > _memoryManager.MaximumStreamCapacity && _memoryManager.MaximumStreamCapacity > 0)
            {
                RecyclableMemoryStreamManager.EventsWriter.MemoryStreamOverCapacity(newCapacity,
                                                                                    _memoryManager
                                                                                    .MaximumStreamCapacity, _tag,
                                                                                    AllocationStack);
                throw new InvalidOperationException("Requested capacity is too large: " + newCapacity + ". Limit is " +
                                                    _memoryManager.MaximumStreamCapacity);
            }

            if (_largeBuffer != null)
            {
                if (newCapacity > _largeBuffer.Length)
                {
                    var newBuffer = _memoryManager.GetLargeBuffer(newCapacity, _tag);
                    InternalRead(newBuffer, 0, _length, 0);
                    ReleaseLargeBuffer();
                    _largeBuffer = newBuffer;
                }
            }
            else
            {
                while (Capacity < newCapacity)
                {
                    _blocks.Add(_memoryManager.GetBlock());
                }
            }
        }