Performance-Optimierung bei Duplikat-Dateinamengenerierung

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 <noreply@anthropic.com>
This commit is contained in:
2025-12-07 20:04:37 +01:00
parent 2e69c5b3d1
commit 104698ab0f
+13 -10
View File
@@ -2282,38 +2282,41 @@ class MainWindow(QMainWindow):
def _generate_alternative_filename(self, original_path: Path, xml_dir: Path) -> Path: def _generate_alternative_filename(self, original_path: Path, xml_dir: Path) -> Path:
""" """
Generiert alternative Dateinamen im Format: datei_1.xml, datei_2.xml, ... Generiert alternative Dateinamen im Format: datei_1.xml, datei_2.xml, ...
Args: Args:
original_path: Ursprünglicher Dateipfad original_path: Ursprünglicher Dateipfad
xml_dir: Ziel-XML-Verzeichnis xml_dir: Ziel-XML-Verzeichnis
Returns: Returns:
Path: Pfad mit alternativem Dateinamen Path: Pfad mit alternativem Dateinamen
""" """
try: try:
base_name = original_path.stem # "datei" base_name = original_path.stem # "datei"
extension = original_path.suffix # ".xml" 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 counter = 1
while True: while True:
new_name = f"{base_name}_{counter}{extension}" new_name = f"{base_name}_{counter}{extension}"
new_path = xml_dir / new_name new_path = xml_dir / new_name
# Prüfe sowohl physische Existenz als auch Verwendung im Projekt # Prüfe sowohl physische Existenz als auch Verwendung im Projekt (optimierter Set-Lookup)
if not new_path.exists() and not self._is_filename_used_in_project(Path("xml") / new_name): if not new_path.exists() and new_name not in used_names:
logger.debug(f"Alternativer Dateiname generiert: {new_name}") logger.debug(f"Alternativer Dateiname generiert: {new_name}")
return new_path return new_path
counter += 1 counter += 1
# Sicherheitsgrenze um Endlosschleifen zu vermeiden # Sicherheitsgrenze um Endlosschleifen zu vermeiden
if counter > 1000: if counter > 1000:
raise Exception("Zu viele alternative Dateinamen generiert") raise Exception("Zu viele alternative Dateinamen generiert")
except Exception as e: except Exception as e:
logger.error(f"Fehler beim Generieren alternativer Dateinamen für {original_path}: {e}") logger.error(f"Fehler beim Generieren alternativer Dateinamen für {original_path}: {e}")
# Fallback: Zeitstempel verwenden # Fallback: Zeitstempel verwenden
import time
timestamp = int(time.time()) timestamp = int(time.time())
fallback_name = f"{original_path.stem}_{timestamp}{original_path.suffix}" fallback_name = f"{original_path.stem}_{timestamp}{original_path.suffix}"
return xml_dir / fallback_name return xml_dir / fallback_name