WinUI Everywhere
21.06.2021, 08:51 Uhr
Uno Platform 3.8: Neue Controls, doppelte Leistung
Das neue Release 3.8 bringt zusätzliche WinUI-Steuerelemente und -Layouts, wie zum Beispiel die CalendarDatePicker- und CalendarView-Steuerelemente, auf alle von Uno unterstützten Plattformen.
Zusätzlich zu den neuen Steuerelementen bringt es das neue Release in einigen Szenarien bis zur doppelten Performance. Realisiert wurde dies durch eine neue Grid-Implementierung sowie Verbesserungen beim Erstellen von DependencyObjects und UI-Elementen.
Zusätzlich zu den neuen UI- und Performance-Funktionen und -Verbesserungen hat das Team über 100 von den Nutzern gemeldetee Probleme bearbeitet. Besonders stolz ist das Uno-Team, dass es mit jedem Release mehr Issues schließen kann als in der vorangegangenen Periode geöffnet wurden.
Details zur Version 3.8
Der CalendarDatePicker/CalendarView waren zwei der am häufigsten von der Communtiy angefragten UI-Controls, die von WinUI/UWP portieren wurden.
Der DatePicker bietet eine standardisierte Möglichkeit, Benutzern die Auswahl eines lokalisierten Datumswertes per Touch-, Maus- oder Tastatureingabe zu ermöglichen. Mit der Uno-Plattform können Sie genau dieselbe Steuerung auf Web, Windows, Linux, macOS, iOS und Android übertragen.
Performance ist ein Kernmerkmal von Uno. Die jüngsten Aktualisierungen im Visual Studio Profiler (insbesondere der Instrumentierungsmodus) haben es dem Uno-Team ermöglicht, wichtige Aktualisierungen zu finden, die in diese Version aufgenommen wurden und die für alle Zielplattformen gelten.
Die DependencyObject-Klasse ist der Kern von WinUI und wird häufig für verschiedene UI-Operationen verwendet. Dies führt laut Uno-Team dazu, dass jede Optimierung, die auf dieser Ebene vorgenommen wird, einen globalen Einfluss auf die Leistung der Anwendung hat. Zum Beispiel behalten viele DependencyProperty-Instanzen ihren Standardwert, werden aber auch nie ausgelesen. Wenn Sie dies ändern, um den Standardwert bei Bedarf zu erstellen und zu berechnen, verbessert sich die Leistung bei der Objekterstellung.
In ähnlicher Weise wird bei vielen DependencyProperty-Instanzen nur der lokale Wert gesetzt. Bisher wurde ein Array zum Speichern dieses einzelnen Wertes erstellt, um den Vorrang zu respektieren, aber das Erstellen eines schnellen Pfades, der nur den Standardwert und den lokalen Wert speichert, brachte eine Verbesserung des Speicherbedarfs.
Eine geringere Anzahl von Garbage-Collector-Handles ist besonders wichtig, da sie die Arbeit reduziert, die der GC leisten muss, um seine Durchläufe abzuschließen, und sie führt letztlich zu kürzeren Pausen, die durch Collections verursacht werden.
Zusätzlich zu den Änderungen der DependencyProperty wurden viele Änderungen an der Art und Weise vorgenommen, wie Objekte initialisiert werden. Diese Änderungen führen zu einer schnelleren UI-Erstellung und zu weniger Wartezeiten für den Benutzer. Zum Beispiel wurden bei WebAssembly bei einigen Objekten eifrig Ereignisregistrierungen für nicht so häufige Szenarien (zum Beispiel Mausradnutzung) erstellt, die bei der Objekterstellung Kosten verursachten.
Ein weiteres Beispiel ist die Materialisierung von Visual States. Einige Steuerelementvorlagen haben sehr große Definitionen mit mehreren Gruppen und Dutzenden von Zuständen, von denen einige in Randfällen verwendet werden (zum Beispiel Drag-and-drop in einem ListViewItem). Ursprünglich wurden in Uno diese großen Objektgraphen bei der Objektinitialisierung erstellt. Jetzt werden diese Objektgraphen bei Bedarf erstellt, und zwar nur, wenn ein Zustand verwendet werden soll.
Außerdem wurden viele andere kleine Optimierungen hinzugefügt, die alle Plattformen betreffen, um Allokationen zu reduzieren, den Aufwand für JavaScript/.NET-Marshalling zu verringern, die Zeit für die Auflösung statischer Ressourcen zu reduzieren und vieles mehr.
Weitere Informationen zum neuen Release 3.8 finden Sie auf dieser Website.