/// <summary> /// NOTE: This was recycleIntBlocks in Lucene /// </summary> public override void RecycleInt32Blocks(int[][] blocks, int start, int end) { int numBlocks = Math.Min(maxBufferedBlocks - freeBlocks, end - start); int size = freeBlocks + numBlocks; if (size >= freeByteBlocks.Length) { int[][] newBlocks = new int[ArrayUtil.Oversize(size, RamUsageEstimator.NUM_BYTES_OBJECT_REF)][]; Array.Copy(freeByteBlocks, 0, newBlocks, 0, freeBlocks); freeByteBlocks = newBlocks; } int stop = start + numBlocks; for (int i = start; i < stop; i++) { freeByteBlocks[freeBlocks++] = blocks[i]; blocks[i] = null; } for (int i = stop; i < end; i++) { blocks[i] = null; } bytesUsed.AddAndGet(-(end - stop) * (m_blockSize * RamUsageEstimator.NUM_BYTES_INT32)); Debug.Assert(bytesUsed.Get() >= 0); }
/// <summary> /// Read in a single partition of data. </summary> internal int ReadPartition(ByteSequencesReader reader) { long start = Environment.TickCount; var scratch = new BytesRef(); while ((scratch.Bytes = reader.Read()) != null) { scratch.Length = scratch.Bytes.Length; buffer.Append(scratch); // Account for the created objects. // (buffer slots do not account to buffer size.) if (ramBufferSize.bytes < bufferBytesUsed.Get()) { break; } } sortInfo.ReadTime += (Environment.TickCount - start); return(buffer.Length); }