private void OverflowToPersistentStream()
        {
            Stream persistentStream = CreatePersistentStream(_forAsync);

            persistentStream.SetLength(UnderlyingStream.Length);

            UnderlyingStream.Position = 0;
            UnderlyingStream.CopyTo(persistentStream);
            UnderlyingStream = persistentStream;
            _isInMemory      = false;
        }
        public object Clone()
        {
            Stream clonedStream;

            if (_isInMemory)
            {
                clonedStream = new MemoryStream((int)UnderlyingStream.Length);
            }
            else
            {
                clonedStream = CreatePersistentStream(_forAsync);
                clonedStream.SetLength(this.Length);
            }

            UnderlyingStream.CopyTo(clonedStream);
            clonedStream.Position = 0L;

            return(new VirtualStream(_threshholdSize, _memoryStatus, clonedStream, _forAsync));
        }