예제 #1
0
 // private methods
 private void ReleaseChunk(ReferenceCountedChunk chunk)
 {
     if (!_disposed)
     {
         lock (_lock)
         {
             if (_chunks.Count < _maxChunkCount)
             {
                 _chunks.Push(chunk);
             }
             // otherwise just let it get garbage collected
         }
     }
 }
예제 #2
0
        /// <inheritdoc/>
        public IBsonChunk GetChunk(int requestedSize)
        {
            ThrowIfDisposed();

            ReferenceCountedChunk referenceCountedChunk = null;

            lock (_lock)
            {
                if (_chunks.Count > 0)
                {
                    referenceCountedChunk = _chunks.Pop();
                }
            }

            if (referenceCountedChunk == null)
            {
                var chunk = new byte[_chunkSize];
                referenceCountedChunk = new ReferenceCountedChunk(chunk, this);
            }

            return(new DisposableChunk(referenceCountedChunk));
        }
예제 #3
0
 // constructors
 public DisposableChunk(ReferenceCountedChunk referenceCountedChunk)
 {
     _referenceCountedChunk = referenceCountedChunk;
     _referenceCountedChunk.IncrementReferenceCount();
 }
 // constructors
 public DisposableChunk(ReferenceCountedChunk referenceCountedChunk)
 {
     _referenceCountedChunk = referenceCountedChunk;
     _referenceCountedChunk.IncrementReferenceCount();
 }
 // private methods
 private void ReleaseChunk(ReferenceCountedChunk chunk)
 {
     if (!_disposed)
     {
         lock (_lock)
         {
             if (_chunks.Count < _maxChunkCount)
             {
                 _chunks.Push(chunk);
             }
             // otherwise just let it get garbage collected
         }
     }
 }
        /// <inheritdoc/>
        public IBsonChunk GetChunk(int requestedSize)
        {
            ThrowIfDisposed();

            ReferenceCountedChunk referenceCountedChunk = null;
            lock (_lock)
            {
                if (_chunks.Count > 0)
                {
                    referenceCountedChunk = _chunks.Pop();
                }
            }

            if (referenceCountedChunk == null)
            {
                var chunk = new byte[_chunkSize];
                referenceCountedChunk = new ReferenceCountedChunk(chunk, this);
            }

            return new DisposableChunk(referenceCountedChunk);
        }