Detail
#26814
Schnelleres Auflösen von Dateien im FileManager (ohne Files.exists(...))
Im tl:MultiFileManager wird beim Auflösen von Dateien mit Hilfe von {{{#!java Files.exists(path) }}} überprüft, ob die Datei selbst überhaupt existiert.
Bei der Analyse der Perfomance beim Start der Anwendung oder bei Benutzung des tl:IconChooserControl wird beim Laden der mögicherweise Theme-abhängigen Dateisystem-Layouts oder dem Parsen von Ressourcen exzessiv der tl:FileManager benötigt.
In dem Zuge ist aufgefallen, dass der Großteil der Zeit für die Prüfung der Existenz einer Datei benötigt wird. Für das JDK 8 ist das Problem mit der API Files.exists(path) bekannt (https://rules.sonarsource.com/java/RSPEC-3725). Wird stattdessen die API path.toFile().exists() benutzt, so lässt sich ein deutlicher Perfomancegewinn auf meinem Rechner feststellen:
- Die Anwendung startet anstelle von 1:30 Minuten in grob 50 Sekunden
- Der IconChooser benötigt statt 17 Sekunden grob 2 Sekunden
Jedoch hängt die Perfomance der Dateisystemoperationen maßgeblich vom Betriebssystem bzw. Dateisystem ab. Linux (vermutlich ext4) scheint dort wesentlich perfomanter die Operationen zu verarbeiten als Windows (vermutlich ntfs oder fat).
Im JDK 11 scheint die Trägheit der File.exists(path) API weiterhin zu bestehen, obwohl man keine weiteren Quellen oder Bug-Reports dazu finden kann.
Test
Anwendung starten und den Dialog öffnen um den IconChooser zu starten. Mit den Änderungen in diesem Ticket sollte der Dialog zügiger geöffnet werden. Die Zeit zum Starten der Anwendung kann ebenfalls überprüft werden.