Perf: Tool-Konfigurationsauflösung in _create_transformation_job gecacht

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 <noreply@anthropic.com>
This commit is contained in:
2026-03-09 20:11:58 +01:00
parent edfe424a6a
commit cfbdb8b7fa
+20 -6
View File
@@ -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]):