public void Sort() { var reader = new SourceReader(_csv, _options.Encoding, _columns); var readHeader = false; long lastFlushPosition = 0; foreach (var result in reader.ReadFromStream()) { if (readHeader == false) { readHeader = true; continue; } for (int index = 0; index < result.Values.Count; index++) { var value = result.Values[index]; var indexState = _indexes[index]; var checkout = _pool.Checkout(value.Count); Array.Copy(value.Array, value.Offset, checkout, 0, value.Count); var arraySegment = new ArraySegment<char>(checkout, 0, value.Count); indexState.Values.Add(new IndexEntry { Position = result.Position, Value = arraySegment }); } if ((_csv.Position - lastFlushPosition) > _options.FlushIndexesInternval) { lastFlushPosition = _csv.Position; FlushIntermediateIndexes(); Console.Write("\r{0:#,#;;0} kb out of {1:#,#;;0} kb = {2:P2}", result.Position / 1024, _csv.Length / 1024, result.Position / (decimal)_csv.Length); } } FlushIntermediateIndexes(); Console.WriteLine(); MergePartialIndexes(); }