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:
+13
-10
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user