From cfbdb8b7fa374462ca0793f31bf469639f71d5b4 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Mon, 9 Mar 2026 20:11:58 +0100 Subject: [PATCH] =?UTF-8?q?Perf:=20Tool-Konfigurationsaufl=C3=B6sung=20in?= =?UTF-8?q?=20=5Fcreate=5Ftransformation=5Fjob=20gecacht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die 5 linearen Lookups (java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir) werden jetzt nur einmalig pro Projekt aufgelöst (_get_cached_project_tools). Bei Batch-Transformationen entfällt das wiederholte Durchsuchen der Listen. Co-Authored-By: Claude Sonnet 4.6 --- src/ui/mixins/transformation.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/ui/mixins/transformation.py b/src/ui/mixins/transformation.py index 1f92419..8237448 100644 --- a/src/ui/mixins/transformation.py +++ b/src/ui/mixins/transformation.py @@ -375,6 +375,24 @@ class TransformationMixin: logger.error(f"Fehler beim Transformieren des TreeNode: {e}") QMessageBox.critical(self, "Fehler", f"Fehler beim Transformieren: {str(e)}") + def _get_cached_project_tools(self): + """ + Gibt die aufgelösten Tool-Konfigurationen des aktuellen Projekts zurück (gecacht). + + Der Cache wird invalidiert, sobald sich die Projekt-ID ändert. + """ + project_id = self.project.id if self.project else None + if getattr(self, "_tool_cache_project_id", None) != project_id: + self._tool_cache_project_id = project_id + self._tool_cache = ( + next((jvm for jvm in app_settings.java_vms if jvm.id == self.project.java_vm_id), None), + next((sj for sj in app_settings.saxon_jars if sj.id == self.project.saxon_jar_id), None), + next((af for af in app_settings.apache_fops if af.id == self.project.apache_fop_id), None), + next((dp for dp in app_settings.diff_pdfs if dp.id == self.project.diff_pdf_id), None), + next((xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None), + ) + return self._tool_cache + def _create_transformation_job( self, xsl_file_obj: XslFile, xml_file_obj: XmlFile, xsl_file_item: QTreeWidgetItem | None = None ) -> TransformationJob | None: @@ -394,12 +412,8 @@ class TransformationMixin: QMessageBox.warning(self, "Fehler", "Kein Projekt geöffnet") return None - # Hole Tool-Konfigurationen aus app_settings - java_vm = next((jvm for jvm in app_settings.java_vms if jvm.id == self.project.java_vm_id), None) - saxon_jar = next((sj for sj in app_settings.saxon_jars if sj.id == self.project.saxon_jar_id), None) - apache_fop = next((af for af in app_settings.apache_fops if af.id == self.project.apache_fop_id), None) - diff_pdf = next((dp for dp in app_settings.diff_pdfs if dp.id == self.project.diff_pdf_id), None) - xsl_dir = next((xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None) + # Tool-Konfigurationen gecacht auflösen (einmalig pro Projekt) + java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir = self._get_cached_project_tools() # Prüfe ob alle Konfigurationen vorhanden sind if not all([java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir]):