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:
@@ -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]):
|
||||
|
||||
Reference in New Issue
Block a user