RAM-Optimierung (Lazy Loading):
- Worker-Pools werden erst bei Transformation gestartet (nicht beim Projekt-Öffnen)
- Worker-Pools werden nach Transformation automatisch beendet
- RAM im Ruhezustand: 0 MB (vorher: ~1.2 GB)
- Temporäre Verzeichnisse werden sauber aufgeräumt
XSL-Stylesheet-Caching (Massive Performance-Steigerung):
- Saxon s9api: HashMap<String, XsltExecutable> Cache
- Saxon JAXP: HashMap<String, Templates> Cache
- Kompilierte Stylesheets werden pro Worker wiederverwendet
- Bei 82 Transformationen mit 8 XSL-Dateien:
* 1. Durchlauf: 8× Kompilierung
* Weitere 74×: Cache-Treffer (sehr schnell!)
Technische Details:
- Worker-Pool-Init verschoben von _on_project_opened zu _start_transformation
- Worker-Pool-Shutdown in _on_all_transformations_finished
- Java-seitiger HashMap-Cache für beide Saxon-Varianten
- Cache-Logging für Debugging
Perfekt für Dauerbetrieb im Hintergrund!
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Die JAXP-basierte SaxonWorkerPool-Implementierung ist nur für XSLT 1.0
vollständig spezifiziert und kann bei XSLT 2.0/3.0 zu fehlerhaften
Ausgaben führen.
Änderungen:
- Neue SaxonWorkerPoolS9Api-Klasse mit Saxon s9api für XSLT 2.0/3.0
- XsltVersion-Enum in conf.py (XSLT_1_0, XSLT_2_0_3_0)
- ComboBox in Performance-Einstellungen zur XSLT-Version-Auswahl
- MainWindow wählt automatisch richtige Worker-Pool-Variante
- Verbesserte Classpath-Behandlung und Fehlerbehandlung
Standard-Einstellung: XSLT 2.0/3.0 (s9api) - empfohlen für moderne Stylesheets
Fallback: XSLT 1.0 (JAXP) - verfügbar für Legacy-Stylesheets
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Performance-Einstellungen wurden vom separaten Menüeintrag in den
Programmeinstellungen-Dialog als eigener Tab verschoben:
- Neuer "Performance"-Tab in AppSettings.ui mit drei Konfigurationsbereichen:
• ThreadPoolExecutor: Worker-Anzahl (1-32, Standard: 8)
• SaxonWorkerPool: Toggle für persistente JVM-Prozesse
• FopWorkerPool: Toggle für persistente JVM-Prozesse
- AppSettings.py erweitert:
• _populate_performance_tab(): Lädt aktuelle Performance-Einstellungen
• accept(): Speichert Performance-Einstellungen in app_settings
- MainWindow.py bereinigt:
• _setup_performance_menu() entfernt
• _open_performance_settings() entfernt
• Separater Menüeintrag im Projekt-Menü entfernt
- AppSettings_ui.py mit pyside6-uic neu generiert
Vorteile: Alle Programmeinstellungen sind nun zentral an einem Ort
verfügbar, bessere Benutzererfahrung durch konsistente UI-Struktur.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>