Nel recente update di Ottobre 2018 di Windows 10, è stato introdotto un nuovo set di API pensato per ottenere il massimo delle performace e un miglior uso della GPU.
Questo nuovo set di API si trova sotto il namespace Windows.UI.Xaml.Core.Direct e permette di creare l'UI non attraverso i classici tipi definiti con XAML, ma attraverso oggetti che implementano IXamlDirectObjects.
Prendiamo ad esempio il seguente XAML:
<Grid x:Name="RootGrid"> <Border BorderBrush="Black" BorderThickness="5"> <Rectangle Height="100" Width="100" Fill="Red" /> </Border> </Grid>
Lo stesso codice può essere scritto anche utilizzando la sintassi imperativa:
Border border = new Border(); border.BorderBrush = new SolidColorBrush(Colors.Black); border.BorderThickness = new Thickness(5); Rectangle rectangle = new Rectangle(); rectangle.Height = 100; rectangle.Width = 100; SolidColorBrush rectBrush = new SolidColorBrush(Colors.Red); rectangle.Fill = rectBrush; border.Child = rectangle; RootGrid.Children.Add(border);
Le performace però sono pressoché identiche a quelle ottenute con lo XAML. Di seguito vediamo come ottenere il massimo delle performance. riscrivendo le istruzioni precedenti, questa volta utilizzando il nuovo set di API:
XamlDirectObject border = XamlDirect.CreateInstance(XamlTypeIndex.Border); XamlDirect.SetThicknessProperty(border, XamlPropertyIndex.Border_BorderThickness, new Thickness(5)); IXamlDirectObject borderBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush); XamlDirect.SetColorProperty(borderBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Black); XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_BorderBrush, borderBrush); IXamlDirectObject rectangle = XamlDirect.CreateInstance(XamlTypeIndex.Rectangle); XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Width, 100); XamlDirect.SetDoubleProperty(rectangle, XamlPropertyIndex.FrameworkElement_Height, 100); IXamlDirectObject rectBrush = XamlDirect.CreateInstance(XamlTypeIndex.SolidColorBrush); XamlDirect.SetColorProperty(rectBrush, XamlPropertyIndex.SolidColorBrush_Color, Colors.Red); XamlDirect.SetXamlDirectObjectProperty(rectangle, XamlPropertyIndex.Shape_Fill, rectangleBrush); XamlDirect.SetXamlDirectObjectProperty(border, XamlPropertyIndex.Border_Child, rectangle); RootGrid.Children.Add((UIElement) XamlDirect.GetObject(border));
È facile intuire, vista la complessità del codice, che le nuove API non sono pensate per realizzare la normale UI delle nostre applicazioni, ma, piuttosto, per la realizzazione e riscrittura di particolari funzionalità, dove ottenere il massimo delle performance dalla scheda grafica è essenziale.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire attività basate su eventi con Azure Container Jobs
Miglioramenti nell'accessibilità con Angular CDK
Creare gruppi di client per Event Grid MQTT
Ottimizzazione dei block template in Angular 17
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Verificare la provenienza di un commit tramite le GitHub Actions
Installare le Web App site extension tramite una pipeline di Azure DevOps
Potenziare Azure AI Search con la ricerca vettoriale
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Reactive form tipizzati con FormBuilder in Angular
Load test di ASP.NET Core con k6