Beispiel #1
0
        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);
        }