Public Access
preformance improvment when using many data_pool objects
This commit is contained in:
@@ -597,22 +597,29 @@ class DamarisGUI:
|
|||||||
# Check if we have significant listener activity
|
# Check if we have significant listener activity
|
||||||
needs_full_cleanup = False
|
needs_full_cleanup = False
|
||||||
listener_count = 0
|
listener_count = 0
|
||||||
|
data_items = 0
|
||||||
|
|
||||||
if hasattr(self.monitor, 'data_pool') and self.monitor.data_pool is not None:
|
if hasattr(self.monitor, 'data_pool') and self.monitor.data_pool is not None:
|
||||||
try:
|
try:
|
||||||
# Count actual listeners instead of just items
|
# Count both listeners and data items for analysis
|
||||||
with self.monitor.data_pool.__dictlock:
|
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
|
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
|
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:
|
except:
|
||||||
needs_full_cleanup = True
|
needs_full_cleanup = True
|
||||||
|
|
||||||
if needs_full_cleanup:
|
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 )
|
self.monitor.observe_data_pool( self.data )
|
||||||
else:
|
else:
|
||||||
# Efficient cleanup: just reset references without full listener cleanup
|
# 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'):
|
if hasattr(self.monitor, 'data_pool'):
|
||||||
# Just set to None - listeners will be garbage collected
|
# Just set to None - listeners will be garbage collected
|
||||||
self.monitor.data_pool = None
|
self.monitor.data_pool = None
|
||||||
|
|||||||
Reference in New Issue
Block a user