Measurement DoOneCheckMeasurement(ReedSolomon codec, BufferSet[] bufferSets, byte[] tempBuffer) { long passesCompleted = 0; long bytesChecked = 0; long checkingTime = 0; while (checkingTime < MEASUREMENT_DURATION) { BufferSet bufferSet = bufferSets[nextBuffer]; nextBuffer = (nextBuffer + 1) % bufferSets.Length; byte[][] shards = bufferSet.Buffers; DateTime startTime = DateTime.UtcNow; if (!codec.IsParityCorrect(shards, 0, BUFFER_SIZE, tempBuffer)) { throw new Exception("parity not correct"); } DateTime endTime = DateTime.UtcNow; checkingTime += (long)(endTime - startTime).TotalMilliseconds; bytesChecked += BUFFER_SIZE * DATA_COUNT; passesCompleted += 1; } double seconds = checkingTime / 1000.0; double megabytes = bytesChecked / 1000000.0; var result = new Measurement(megabytes, seconds); Console.WriteLine(" {0} passes, {1}", passesCompleted, result); return(result); }