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
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Migrare una service connection a workload identity federation in Azure DevOps
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Creare una libreria CSS universale: i bottoni
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Disabilitare automaticamente un workflow di GitHub
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Gestione dei nomi con le regole @layer in CSS
Utilizzare gRPC su App Service di Azure
Path addizionali per gli asset in ASP.NET Core MVC
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- .NET Conference Italia 2023 - Milano e Online
- .NET Conference Italia 2024 - Milano
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!