Migliorare le prestazioni con la cache di WPF 4.0

di , in Windows Presentation Foundation,

Il motore di rendering di WPF è basato sulle DirectX e grazie alle primitive offerte permette di effetuare rendering vettoriali che non perdono di qualità durante le trasformazioni. Quando però il visual tree è articolato e la superficie di disegno è ampia, applicare trasformazioni può portare a scarse prestazioni.

In WPF 4.0 è stato quindi inserito il supporto al caching degli elementi, con lo stesso meccanismo già presente da Silverlight 3.0. Attraverso la proprietà CacheMode, disponibile per ogni UIElement, è possibile indicare la modalità di cache da applicare all'elemento stesso e ai figli. L'unica modalità di cache disponibile è il BitmapCache, il quale scatta una fotografia del rendering e la utilizza per ogni successiva trasformazione, evitando ad ogni frame delle animazioni di ridisegnare l'area con l'intero processo di rendering. Ciò significa che solo le trasformazioni effettuate con RenderTransform beneficiano di questo meccanismo, mentre ogni modifica a proprietà dell'elemento stesso o del figlio invalida la cache, rigenerandola.

Ecco quindi come effettuare il cache di un elemento che verrà poi scalato e animato:

<Button Width="50" Height="50" Content="Test">
  <Button.CacheMode>
    <BitmapCache RenderAtScale="4" />
  </Button.CacheMode>
  <Button.RenderTransform>
    <ScaleTransform ScaleX="4" ScaleY="4" />
  </Button.RenderTransform>
</Button>

L'oggetto BitmapCache dispone inoltre della proprietà RenderAtScale che permette di indicare a che ratio (1 corrisponde alla dimensione originale) scattare la fotografia. In questo modo è possibile trovare il compromesso giusto tra qualità della bitmap e prestazioni dell'animazione. Un ratio basso favorisce le prestazioni, ma rende la qualità minore quando questa subirà un ingrandimento, viceversa un ratio alto favorisce la qualità, ma alloca più memoria nella scheda video.

Commenti

Visualizza/aggiungi commenti

Migliorare le prestazioni con la cache di WPF 4.0 (#193)
| Condividi su: Twitter, Facebook, LinkedIn, Google+

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi