From 104698ab0f7b1fe8cae84a713b02384093c95264 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Sun, 7 Dec 2025 20:04:37 +0100 Subject: [PATCH] Performance-Optimierung bei Duplikat-Dateinamengenerierung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sammelt alle verwendeten XML-Dateinamen einmalig in ein Set für schnelleren Lookup beim Generieren alternativer Dateinamen. Ersetzt wiederholte Funktionsaufrufe durch effizienten Set-Lookup. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- src/ui/MainWindow.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index 2f021ed..bcb9b87 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -2282,38 +2282,41 @@ class MainWindow(QMainWindow): def _generate_alternative_filename(self, original_path: Path, xml_dir: Path) -> Path: """ Generiert alternative Dateinamen im Format: datei_1.xml, datei_2.xml, ... - + Args: original_path: Ursprünglicher Dateipfad xml_dir: Ziel-XML-Verzeichnis - + Returns: Path: Pfad mit alternativem Dateinamen """ try: base_name = original_path.stem # "datei" extension = original_path.suffix # ".xml" - + + # Sammle einmalig alle verwendeten Dateinamen (Performance-Optimierung) + all_xml_files = self._get_all_project_xml_files() + used_names = {xml_file.xml.name for xml_file in all_xml_files} + counter = 1 while True: new_name = f"{base_name}_{counter}{extension}" new_path = xml_dir / new_name - - # Prüfe sowohl physische Existenz als auch Verwendung im Projekt - if not new_path.exists() and not self._is_filename_used_in_project(Path("xml") / new_name): + + # Prüfe sowohl physische Existenz als auch Verwendung im Projekt (optimierter Set-Lookup) + if not new_path.exists() and new_name not in used_names: logger.debug(f"Alternativer Dateiname generiert: {new_name}") return new_path - + counter += 1 - + # Sicherheitsgrenze um Endlosschleifen zu vermeiden if counter > 1000: raise Exception("Zu viele alternative Dateinamen generiert") - + except Exception as e: logger.error(f"Fehler beim Generieren alternativer Dateinamen für {original_path}: {e}") # Fallback: Zeitstempel verwenden - import time timestamp = int(time.time()) fallback_name = f"{original_path.stem}_{timestamp}{original_path.suffix}" return xml_dir / fallback_name