Profile: Create cache for 'get_water_limits' results.

opt-result
Pierre-Antoine 2026-06-17 17:40:19 +02:00
parent 565a7530fb
commit 1975ed7eaa
1 changed files with 8 additions and 0 deletions

View File

@ -91,6 +91,8 @@ class ProfileXYZ(Profile, SQLSubModel):
self._station = [] self._station = []
self.station_up_to_date = False self.station_up_to_date = False
self._get_water_limits_cache = {}
@classmethod @classmethod
def _db_create(cls, execute, ext=""): def _db_create(cls, execute, ext=""):
execute(f""" execute(f"""
@ -868,6 +870,9 @@ class ProfileXYZ(Profile, SQLSubModel):
i_left = -1 i_left = -1
i_right = -1 i_right = -1
if z in self._get_water_limits_cache:
return self._get_water_limits_cache[z]
for i in range(self.number_points): for i in range(self.number_points):
if self.point(i).z <= z: if self.point(i).z <= z:
i_left = i i_left = i
@ -908,6 +913,9 @@ class ProfileXYZ(Profile, SQLSubModel):
else: else:
pt_right = self.point(self.number_points - 1) pt_right = self.point(self.number_points - 1)
# Put results in cache
self._get_water_limits_cache[z] = (pt_left, pt_right)
# Create a generator to improve results data reading speed # Create a generator to improve results data reading speed
yield pt_left, pt_right yield pt_left, pt_right