From 87e2d7f75a23b2dc2aad5fadca2ccc5e6c94db23 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Fri, 15 Apr 2016 12:59:45 +0200 Subject: [PATCH] improve lookup time for full-load curves --- .../SimulationComponent/Data/FullLoadCurve.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/FullLoadCurve.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/FullLoadCurve.cs index 3be1412483..6b46f9eca9 100644 --- a/VectoCore/VectoCore/Models/SimulationComponent/Data/FullLoadCurve.cs +++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/FullLoadCurve.cs @@ -51,6 +51,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data [Required, ValidateObject] internal List<FullLoadCurveEntry> FullLoadEntries; + private SortedList<PerSecond, int> _quickLookup; + [Required] internal LookupData<PerSecond, Second> PT1Data; /// <summary> @@ -223,7 +225,22 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data if (angularVelocity > FullLoadEntries.Last().EngineSpeed) { return FullLoadEntries.Count - 1; } - for (var index = 1; index < FullLoadEntries.Count; index++) { + + if (_quickLookup == null) { + _quickLookup = new SortedList<PerSecond, int>(); + var i = 10; + for (; i < FullLoadEntries.Count; i += 10) { + _quickLookup.Add(FullLoadEntries[i].EngineSpeed, Math.Max(1, i - 10)); + } + _quickLookup.Add(FullLoadEntries.Last().EngineSpeed + 0.1.SI<PerSecond>(), Math.Max(1, i - 10)); + } + var start = 1; + foreach (var lookup in _quickLookup.Where(lookup => angularVelocity < lookup.Key)) { + start = lookup.Value; + break; + } + + for (var index = start; index < FullLoadEntries.Count; index++) { if (angularVelocity >= FullLoadEntries[index - 1].EngineSpeed && angularVelocity <= FullLoadEntries[index].EngineSpeed) { return index; -- GitLab