public void TestDailyParallization() { //Energiemenge em ; //using (StreamReader r = new StreamReader(Directory.GetFiles("BusinessObjectExtensions/Energiemenge/completeness", "threeyears.json").First())) //{ // string jsonString = r.ReadToEnd(); // em = JsonConvert.DeserializeObject<Energiemenge>(jsonString); //} Energiemenge em = new Energiemenge(); DateTime dateTime = DateTime.Parse("2015-01-31 22:45:00"); List <Verbrauch> listvb = new List <Verbrauch>(); for (int u = 0; u < 1500; u++) { dateTime = dateTime.AddMinutes(15); DateTime endDateTime = dateTime.AddMinutes(15); listvb.Add(new Verbrauch() { Startdatum = dateTime, Enddatum = endDateTime, Einheit = Mengeneinheit.JAHR, Wert = 12 }); dateTime = endDateTime; } em.Energieverbrauch = listvb; MiniProfiler mpLinear = MiniProfiler.StartNew("Non-Parallel"); em.GetMonthlyCompletenessReports(new TimeRange(new DateTime(2015, 1, 1, 23, 00, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: false); mpLinear.Stop(); Console.Out.Write(mpLinear.RenderPlainText()); //Assert.IsTrue(mpLinear.DurationMilliseconds < 4000, $"Linear completeness report generation was too slow. Expected less than 4 seconds but was {mpLinear.DurationMilliseconds}ms: {mpLinear.RenderPlainText()}"); MiniProfiler mpParallel = MiniProfiler.StartNew("Parallel"); em.GetDailyCompletenessReports(new TimeRange(new DateTime(2015, 1, 01, 23, 0, 0, DateTimeKind.Utc), new DateTime(2019, 12, 31, 23, 0, 0, DateTimeKind.Utc)), useParallelExecution: true); mpParallel.Stop(); Console.Out.Write(mpParallel.RenderPlainText()); //Assert.IsTrue(mpParallel.DurationMilliseconds < 3000, $"Parallel completeness report generation was too slow. Expected less than 3 seconds but was {mpParallel.DurationMilliseconds}ms: {mpParallel.RenderPlainText()}"); //Assert.IsTrue(mpParallel.DurationMilliseconds < (int)mpLinear.DurationMilliseconds * 1.25M, $"Parallel: {mpParallel.DurationMilliseconds}, Non-Parallel: {mpLinear.DurationMilliseconds}"); }
internal void TestMonthlySlices(bool testFirstOnly = true, bool useParallelExecution = false) { foreach (string boFile in Directory.GetFiles("Energiemenge/completeness", "50hz_prognose*.json")) { using (MiniProfiler.Current.Step($"Processing file {boFile} with parallel={useParallelExecution}")) { JObject json; using (StreamReader r = new StreamReader(boFile)) { string jsonString = r.ReadToEnd(); json = JsonConvert.DeserializeObject <JObject>(jsonString); } Energiemenge em = BoMapper.MapObject <Energiemenge>(json, LenientParsing.Strict); var result = em.GetMonthlyCompletenessReports(GERMAN_YEAR_2018, useParallelExecution: useParallelExecution); Assert.AreEqual(12, result.Count); // don't care about values of coverage, just the start/end and count of reports generated. if (testFirstOnly) { break; // one test is enough. the rest is covered by the individual completeness report tests } } } }