示例#1
0
        public void General_Test()
        {
            var time1 = new TimeSpan(0, 0, 0, 59);
            var time2 = new TimeSpan(0, 0, 2, 1);
            var time3 = new TimeSpan(0, 1, 0, 0); // max

            var statistics = new SpeedStatistics("TestName");

            statistics.Add(time1);
            statistics.Add(time2);
            statistics.Add(time3);

            Assert.AreEqual("TestName", statistics.Name, "Name");

            Assert.AreEqual(time1, statistics.ExecutionTimes.ToList()[0], "time1");
            Assert.AreEqual(time2, statistics.ExecutionTimes.ToList()[1], "time2");
            Assert.AreEqual(time3, statistics.ExecutionTimes.ToList()[2], "time3");

            Assert.AreEqual(3, statistics.Count(), "Count();");

            Assert.AreEqual(time1, statistics.Min(), "Max();");
            Assert.AreEqual(time3, statistics.Max(), "Min();");
            Assert.AreEqual(new TimeSpan(0, 0, 21, 0), statistics.Average(), "Average();");
            Assert.AreEqual(new TimeSpan(0, 1, 2, 60), statistics.Total(), "Total();");
        }
示例#2
0
        public static JsonObjectCollection ConvertStatisticToJson(SpeedStatistics statistic, string statisticName)
        {
            JsonObjectCollection jsonTest         = new JsonObjectCollection(statisticName);
            JsonArrayCollection  jsonRecords      = new JsonArrayCollection("Records");
            JsonArrayCollection  jsonTime         = new JsonArrayCollection("Time");
            JsonArrayCollection  jsonAverageSpeed = new JsonArrayCollection("AverageSpeed");
            JsonArrayCollection  jsonMomentSpeed  = new JsonArrayCollection("MomentSpeed");

            for (int i = 0; i < BenchmarkTest.INTERVAL_COUNT; i++)
            {
                // Number of records & timespan.
                var rec = statistic.GetRecordAt(i);
                jsonRecords.Add(new JsonNumericValue(rec.Key));
                jsonTime.Add(new JsonNumericValue(rec.Value.TotalMilliseconds));

                // Average speed.
                var averageSpeed = statistic.GetAverageSpeedAt(i);
                jsonAverageSpeed.Add(new JsonNumericValue(averageSpeed));


                // Moment write speed.
                var momentSpeed = statistic.GetMomentSpeedAt(i);
                jsonMomentSpeed.Add(new JsonNumericValue(momentSpeed));
            }

            jsonTest.Add(jsonRecords);
            jsonTest.Add(jsonTime);
            jsonTest.Add(jsonAverageSpeed);
            jsonTest.Add(jsonMomentSpeed);

            return(jsonTest);
        }
示例#3
0
        public BenchmarkTest(Database database, int flowCount, long recordCount, float randomness, CancellationTokenSource cancellation)
        {
            Database = database;

            FlowCount   = flowCount;
            RecordCount = recordCount;
            Randomness  = randomness;
            KeysType    = Randomness == 0f ? KeysType.Sequential : KeysType.Random;

            // Statistics.
            int length = Enum.GetValues(typeof(TestMethod)).Length - 1;

            SpeedStatistics  = new SpeedStatistics[length];
            MemoryStatistics = new MemoryStatistics[length];

            int step = (int)((recordCount) / INTERVAL_COUNT);

            for (int i = 0; i < length; i++)
            {
                SpeedStatistics[i]      = new SpeedStatistics(INTERVAL_COUNT);
                SpeedStatistics[i].Step = step;

                MemoryStatistics[i]      = new MemoryStatistics(INTERVAL_COUNT);
                MemoryStatistics[i].Step = step;
            }

            Cancellation = cancellation;
        }
示例#4
0
        public PerformanceWatch(string name, int step)
        {
            this.name = name;

            SpeedStatistics  = new SpeedStatistics(Benchmark.INTERVAL_COUNT, step);
            MemoryStatistics = new MemoryStatistics(Benchmark.INTERVAL_COUNT, step);
        }
示例#5
0
        /// <summary>
        /// Stop all statistics.
        /// </summary>
        public void Stop()
        {
            SpeedStatistics.Stop();
            MemoryStatistics.Stop();

            if (OnStop != null)
            {
                OnStop(this);
            }
        }
示例#6
0
        public static JsonObjectCollection ConvertToJson(BenchmarkTest benchmark, ReportType type)
        {
            JsonObjectCollection jsonBenchmark = new JsonObjectCollection("BenchmarkTest");

            // Test info parameters.
            JsonObjectCollection jsonSettings = new JsonObjectCollection("TestInfo");

            jsonSettings.Add(new JsonNumericValue("FlowCount", benchmark.FlowCount));
            jsonSettings.Add(new JsonNumericValue("RecordCount", benchmark.RecordCount));
            jsonSettings.Add(new JsonNumericValue("Randomness", benchmark.Randomness * 100));

            long elapsedTime = benchmark.EndTime.Ticks - benchmark.StartTime.Ticks;

            jsonSettings.Add(new JsonNumericValue("ElapsedTime", new TimeSpan(elapsedTime).TotalMilliseconds));

            JsonObjectCollection jsonDatabase = new JsonObjectCollection("Database");

            jsonDatabase.Add(new JsonStringValue("Name", benchmark.Database.Name));
            jsonDatabase.Add(new JsonStringValue("IndexingTechnology", benchmark.Database.IndexingTechnology.ToString()));
            jsonDatabase.Add(new JsonStringValue("Category", benchmark.Database.Name));

            jsonDatabase.Add(new JsonNumericValue("AverageWriteSpeed", benchmark.GetSpeed(TestMethod.Write)));
            jsonDatabase.Add(new JsonNumericValue("AverageReadSpeed", benchmark.GetSpeed(TestMethod.Read)));
            jsonDatabase.Add(new JsonNumericValue("AverageSecondaryReadSpeed", benchmark.GetSpeed(TestMethod.SecondaryRead)));

            jsonDatabase.Add(new JsonNumericValue("WritePeakMemoryUsage", benchmark.GetPeakWorkingSet(TestMethod.Write) / (1024.0 * 1024.0)));
            jsonDatabase.Add(new JsonNumericValue("ReadPeakMemoryUsage", benchmark.GetPeakWorkingSet(TestMethod.Read) / (1024.0 * 1024.0)));
            jsonDatabase.Add(new JsonNumericValue("SecondaryReadPeakMemoryUsage", benchmark.GetPeakWorkingSet(TestMethod.SecondaryRead) / (1024.0 * 1024.0)));

            jsonDatabase.Add(new JsonNumericValue("Size", benchmark.DatabaseSize / (1024.0 * 1024.0)));

            JsonObjectCollection jsonDatabaseSettings = new JsonObjectCollection("Settings");

            if (benchmark.Database.Settings != null)
            {
                foreach (var item in benchmark.Database.Settings)
                {
                    jsonDatabaseSettings.Add(new JsonStringValue(item.Key, item.Value));
                }
            }

            jsonDatabase.Add(jsonDatabaseSettings);

            // Test results.
            JsonObjectCollection jsonTestData      = new JsonObjectCollection("TestResults");
            JsonObject           jsonWrite         = null;
            JsonObject           jsonRead          = null;
            JsonObject           jsonSecondaryRead = null;

            if (type == ReportType.Summary)
            {
                jsonWrite         = new JsonNumericValue("Write", benchmark.GetSpeed(TestMethod.Write));
                jsonRead          = new JsonNumericValue("Read", benchmark.GetSpeed(TestMethod.Read));
                jsonSecondaryRead = new JsonNumericValue("SecondaryRead", benchmark.GetSpeed(TestMethod.SecondaryRead));
            }
            else // type == ReportType.Detailed
            {
                // Get statistics and convert them to JSON.
                SpeedStatistics writeStat         = benchmark.SpeedStatistics[(int)TestMethod.Write];
                SpeedStatistics readStat          = benchmark.SpeedStatistics[(int)TestMethod.Read];
                SpeedStatistics secondaryReadStat = benchmark.SpeedStatistics[(int)TestMethod.SecondaryRead];

                jsonWrite         = ConvertStatisticToJson(writeStat, "Write");
                jsonRead          = ConvertStatisticToJson(readStat, "Read");
                jsonSecondaryRead = ConvertStatisticToJson(secondaryReadStat, "SecondaryRead");
            }

            jsonTestData.Add(jsonWrite);
            jsonTestData.Add(jsonRead);
            jsonTestData.Add(jsonSecondaryRead);

            // Form the end JSON structure.
            jsonBenchmark.Add(jsonSettings);
            jsonBenchmark.Add(jsonDatabase);
            jsonBenchmark.Add(jsonTestData);

            return(jsonBenchmark);
        }
        public static void ExportDetailedTestResults(List <BenchmarkTest> sessions, string path)
        {
            if (sessions.Count == 0)
            {
                return;
            }

            // ---Write Detailed Results File---

            using (StreamWriter writer = new StreamWriter(path))
            {
                // write settings
                ExportSettings(writer, sessions[0]);

                // write computer configuration
                writer.WriteLine();
                ExportComputerConfiguration(writer, SystemUtils.GetComputerConfiguration());

                writer.WriteLine();

                // write databases
                writer.WriteLine(String.Join(";;;;;;;;;;;", sessions.Select(x => x.Database.Name)));
                writer.WriteLine(String.Join(";", Enumerable.Repeat("Records;Write time;Read time;Secondary read time;Average write;Average read;Average secondary read;Moment write;Moment read;Moment secondary read;", sessions.Count)));

                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < BenchmarkTest.INTERVAL_COUNT; i++)
                {
                    for (int k = 0; k < sessions.Count; k++)
                    {
                        BenchmarkTest session = sessions[k];

                        // get statistics
                        SpeedStatistics writeStat         = session.SpeedStatistics[(int)TestMethod.Write];
                        SpeedStatistics readStat          = session.SpeedStatistics[(int)TestMethod.Read];
                        SpeedStatistics secondaryReadStat = session.SpeedStatistics[(int)TestMethod.SecondaryRead];

                        // calculate average speeds
                        var avgWriteSpeed         = writeStat.GetAverageSpeedAt(i);
                        var avgReadSpeed          = readStat.GetAverageSpeedAt(i);
                        var avgSecondaryReadSpeed = secondaryReadStat.GetAverageSpeedAt(i);

                        // calculate moment speeds
                        var momentWriteSpeed         = writeStat.GetMomentSpeedAt(i);
                        var momentReadSpeed          = readStat.GetMomentSpeedAt(i);
                        var momentSecondaryReadSpeed = secondaryReadStat.GetMomentSpeedAt(i);

                        // number of records & write timespan
                        var rec = writeStat.GetRecordAt(i);
                        builder.AppendFormat("{0};{1};", rec.Key, rec.Value.TotalMilliseconds);

                        // read timespan
                        rec = readStat.GetRecordAt(i);
                        builder.AppendFormat("{0};", rec.Value.TotalMilliseconds);

                        // secondary read timespan
                        rec = secondaryReadStat.GetRecordAt(i);
                        builder.AppendFormat("{0};", rec.Value.TotalMilliseconds);

                        // speeds
                        builder.Append(avgWriteSpeed + ";");
                        builder.Append(avgReadSpeed + ";");
                        builder.Append(avgSecondaryReadSpeed + ";");
                        builder.Append(momentWriteSpeed + ";");
                        builder.Append(momentReadSpeed + ";");
                        builder.Append(momentSecondaryReadSpeed + ";");
                        builder.Append(";");
                    }

                    writer.WriteLine(builder.ToString());
                    builder.Clear();
                }

                // write size
                writer.WriteLine();
                writer.WriteLine(String.Join(";;;;;;;;;;;", Enumerable.Repeat("Size(MB)", sessions.Count)));
                writer.WriteLine(String.Join(";;;;;;;;;;;", sessions.Select(x => x.Database.Size / (1024.0 * 1024.0))));
            }
        }
示例#8
0
 /// <summary>
 /// Add point (measurement) to all statistics.
 /// </summary>
 public void Add()
 {
     SpeedStatistics.Add();
     MemoryStatistics.Add();
 }