Ottimizzazione delle prestazioni: altri suggerimenti

Questo argomento offre suggerimenti sulle prestazioni aggiuntivi rispetto a quelli descritti negli argomenti della sezione Ottimizzazione delle prestazioni di applicazioni WPF.

Questo argomento include le sezioni seguenti:

Pennelli opachi ed elementi opachi

Quando si usa un Brush oggetto per impostare o StrokeFill di un elemento, è preferibile impostare il Brush.Opacity valore anziché l'impostazione della proprietà dell'elementoOpacity. La modifica della proprietà di un elemento può causare la creazione di una superficie temporanea da parte di Opacity WPF.

L'oggetto NavigationWindow deriva da Window e lo estende con il supporto dello spostamento del contenuto, principalmente aggregando NavigationService e il journal. È possibile aggiornare l'area client di NavigationWindow specificando un URI (Uniform Resource Identifier) o un oggetto . L'esempio seguente illustra entrambi i metodi:

private void buttonGoToUri(object sender, RoutedEventArgs args)
{
    navWindow.Source = new Uri("NewPage.xaml", UriKind.RelativeOrAbsolute);
}

private void buttonGoNewObject(object sender, RoutedEventArgs args)
{
    NewPage nextPage = new NewPage();
    nextPage.InitializeComponent();
    navWindow.Content = nextPage;
}
Private Sub buttonGoToUri(ByVal sender As Object, ByVal args As RoutedEventArgs)
    navWindow.Source = New Uri("NewPage.xaml", UriKind.RelativeOrAbsolute)
End Sub

Private Sub buttonGoNewObject(ByVal sender As Object, ByVal args As RoutedEventArgs)
    Dim nextPage As New NewPage()
    nextPage.InitializeComponent()
    navWindow.Content = nextPage
End Sub

Ogni NavigationWindow oggetto ha un journal che registra la cronologia di navigazione dell'utente in tale finestra. Uno degli scopi del journal è quello di consentire agli utenti di rintracciare i passaggi eseguiti.

Quando si naviga usando un URI (Uniform Resource Identifier), il journal archivia solo il riferimento URI (Uniform Resource Identifier). Ogni volta che viene rivisitata, la pagina viene ricostruita in modo dinamico; questa operazione può richiedere molto tempo, a seconda della complessità della pagina. In questo caso, il costo di archiviazione nel journal è basso, ma il tempo necessario per la ricostruzione della pagina è potenzialmente lungo.

Con la navigazione tramite un oggetto, nel journal viene archiviata l'intera struttura ad albero visiva dell'oggetto. Ogni volta che la pagina viene rivisitata, quindi, ne viene immediatamente eseguito il rendering, senza che debba essere ricostruita. In questo caso, il costo di archiviazione nel journal è alto, ma il tempo necessario per la ricostruzione della pagina è ridotto.

Quando si usa l'oggetto NavigationWindow , è necessario tenere presente come il supporto del journaling influisce sulle prestazioni dell'applicazione. Per altre informazioni, vedere Cenni preliminari sulla navigazione.

Hit testing su superfici 3D ampie

L'hit testing su superfici 3D ampie presenta requisiti particolarmente elevati in termini di consumo della CPU, soprattutto se alla superficie 3D viene aggiunta un'animazione. Se l'hit testing su queste superfici non è necessario, quindi, è opportuno disabilitarlo. Gli oggetti derivati da UIElement possono disabilitare l'hit testing impostando la IsHitTestVisible proprietà su false.

Evento CompositionTarget.Rendering

L'evento causa l'animazione CompositionTarget.Rendering continua di WPF. Se si usa questo evento, disconnetterlo ogni volta che è possibile.

Evitare l'uso di ScrollBarVisibility=Auto

Quando possibile, evitare di usare il ScrollBarVisibility.Auto valore per le HorizontalScrollBarVisibility proprietà e VerticalScrollBarVisibility . Queste proprietà sono definite per RichTextBoxgli oggetti , ScrollViewere TextBox e come proprietà associata per l'oggetto ListBox . Impostare invece su ScrollBarVisibilityDisabled, Hiddeno Visible.

Il Auto valore è destinato ai casi in cui lo spazio è limitato e le barre di scorrimento devono essere visualizzate solo quando necessario. Ad esempio, può essere utile usare questo ScrollBarVisibility valore con un ListBox massimo di 30 elementi anziché con TextBox centinaia di righe di testo.

Configurare il servizio Cache tipi di carattere per ridurre il tempo di avvio

Il servizio Cache dei tipi di carattere WPF condivide i dati dei tipi di carattere tra le applicazioni WPF. La prima applicazione WPF eseguita avvia questo servizio se il servizio non è già in esecuzione. Se si usa Windows Vista, è possibile impostare il servizio "Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" da "Manuale" (impostazione predefinita) su "Automatic (Delayed Start)" per ridurre l'ora iniziale di avvio delle applicazioni WPF.

Vedi anche