diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java index 985be9f0143..88491717019 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java @@ -709,7 +709,8 @@ public class CandidateFinderImpl implements CandidateFinder { Util.Pair, List> result = new Util.Pair, List>( new ArrayList(), new ArrayList()); DynamicGPSFixTrack track = race.getTrack(c); - + final Map lastFixBeforeCache = new LimitedLinkedHashMap<>(10); + final Map firstFixAfterCache = new LimitedLinkedHashMap<>(10); for (GPSFixMoving fix : fixes) { if (timeRangeForValidCandidates.getTimeRangeOrNull() != null && timeRangeForValidCandidates.getTimeRangeOrNull().includes(fix.getTimePoint())) { TimePoint t = fix.getTimePoint(); @@ -720,8 +721,8 @@ public class CandidateFinderImpl implements CandidateFinder { try { fixIsValid = track.isValid(fix); if (fixIsValid) { - fixBefore = track.getLastFixBefore(t); - fixAfter = track.getFirstFixAfter(t); + fixBefore = lastFixBeforeCache.computeIfAbsent(t, timePoint->track.getLastFixBefore(timePoint)); + fixAfter = firstFixAfterCache.computeIfAbsent(t, timePoint->track.getFirstFixAfter(timePoint)); } } finally { track.unlockAfterRead();