public override void Close()
{
if (IsShared)
{
if (UsedReader)
Reader.DiscardBufferedData();
UsedBuffered = UsedReader = UsedWriter = false;
}
else if (!disposed && BoundToThread == Thread.CurrentThread.ManagedThreadId)
{
disposed = true;
if (Writer != null && UsedWriter)
Writer.Flush();
if (Reader != null && UsedReader)
Reader.DiscardBufferedData();
UsedBuffered = UsedReader = UsedWriter = false;
if (CurrentEstimate < SizeLimit || Blocks.Count > 10000)
{
MemoryPool.Push(this);
CurrentEstimate++;
}
else CurrentEstimate = MemoryPool.Count;
}
}