예제 #1
0
		public BufferSegment(ArrayBuffer buffer, int offset, int length, int id)
		{
			Buffer = buffer;
			Offset = offset;
			Length = length;
            Number = id;
		}
        /// <summary>
        /// Creates a new buffer and adds the segments to the buffer pool.
        /// </summary>
        private void CreateBuffer()
        {
            // create a new buffer
            var newBuf = new ArrayBuffer(this, _segmentCount * _segmentSize);

            // create segments from the buffer
            for (int i = 0; i < _segmentCount; i++)
            {
                _availableSegments.Enqueue(new BufferSegment(newBuf, i * _segmentSize, _segmentSize, _segmentId++));
            }

            // increment our total count
            _totalSegmentCount += _segmentCount;

            // hold a ref to our new buffer
            _buffers.Add(newBuf);

            // update global alloc'd memory
            Interlocked.Add(ref GlobalAllocatedMemory, _segmentCount * _segmentSize);
        }