From ebc2daf1704648d7794e4c84dcea04ab31ac0cd8 Mon Sep 17 00:00:00 2001 From: Markus Rosenstihl Date: Sun, 12 Jul 2026 22:52:39 +0200 Subject: [PATCH] preformance improvment when using many data_pool objects --- src/damaris/gui/DamarisGUI.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/damaris/gui/DamarisGUI.py b/src/damaris/gui/DamarisGUI.py index a206efb..bf864bf 100644 --- a/src/damaris/gui/DamarisGUI.py +++ b/src/damaris/gui/DamarisGUI.py @@ -597,22 +597,29 @@ class DamarisGUI: # Check if we have significant listener activity needs_full_cleanup = False listener_count = 0 + data_items = 0 if hasattr(self.monitor, 'data_pool') and self.monitor.data_pool is not None: try: - # Count actual listeners instead of just items + # Count both listeners and data items for analysis with self.monitor.data_pool.__dictlock: listener_count = len(self.monitor.data_pool.__registered_listeners) if hasattr(self.monitor.data_pool, '__registered_listeners') else 0 + data_items = len(self.monitor.data_pool) needs_full_cleanup = listener_count > 5 # Only full cleanup if many listeners + + # Analyze the structure + flat_keys = sum(1 for key in self.monitor.data_pool.keys() if '/' not in key) + nested_keys = data_items - flat_keys + print(f"DEBUG: Data pool analysis - {data_items} total items, {flat_keys} flat, {nested_keys} nested, {listener_count} listeners") except: needs_full_cleanup = True if needs_full_cleanup: - print(f"Performing full cleanup ({listener_count} listeners)...") + print(f"Performing full cleanup ({listener_count} listeners, {data_items} items)...") self.monitor.observe_data_pool( self.data ) else: # Efficient cleanup: just reset references without full listener cleanup - print(f"Efficient cleanup ({listener_count} listeners - skipping full cleanup)") + print(f"Efficient cleanup ({listener_count} listeners, {data_items} items - skipping full cleanup)") if hasattr(self.monitor, 'data_pool'): # Just set to None - listeners will be garbage collected self.monitor.data_pool = None