Ottimizzazione delle prestazioni: altri suggerimentiOptimizing Performance: Other Recommendations

Questo argomento offre suggerimenti sulle prestazioni aggiuntivi rispetto a quelli descritti negli argomenti della sezione Ottimizzazione delle prestazioni di applicazioni WPF.This topic provides performance recommendations in addition to the ones covered by the topics in the Optimizing WPF Application Performance section.

Di seguito sono elencate le diverse sezioni di questo argomento:This topic contains the following sections:

Pennelli opachi ed elementi opachiOpacity on Brushes Versus Opacity on Elements

Quando si usa un Brush per impostare la Fill o Stroke di un elemento, è preferibile impostare il valore di Brush.Opacity anziché l'impostazione della proprietà Opacity dell'elemento.When you use a Brush to set the Fill or Stroke of an element, it is better to set the Brush.Opacity value rather than the setting the element's Opacity property. La modifica della proprietà Opacity di un elemento può provocare WPFWPF la creazione di una superficie temporanea.Modifying an element's Opacity property can cause WPFWPF to create a temporary surface.

L'oggetto NavigationWindow deriva da Window e lo estende con il supporto per la navigazione del contenuto, principalmente aggregando NavigationService e Journal.The NavigationWindow object derives from Window and extends it with content navigation support, primarily by aggregating NavigationService and the journal. È possibile aggiornare l'area client di NavigationWindow specificando un URI (Uniform Resource Identifier) o un oggetto.You can update the client area of NavigationWindow by specifying either a uniform resource identifier (URI) or an object. L'esempio seguente illustra entrambi i metodi:The following sample shows both methods:

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 oggetto NavigationWindow dispone di un journal che registra la cronologia di navigazione dell'utente in tale finestra.Each NavigationWindow object has a journal that records the user's navigation history in that window. Uno degli scopi del journal è quello di consentire agli utenti di rintracciare i passaggi eseguiti.One of the purposes of the journal is to allow users to retrace their steps.

Quando si esegue la navigazione utilizzando un URI (Uniform Resource Identifier), nel journal viene archiviato solo il riferimento URI (Uniform Resource Identifier).When you navigate using a uniform resource identifier (URI), the journal stores only the uniform resource identifier (URI) reference. Ogni volta che viene rivisitata, la pagina viene ricostruita in modo dinamico; questa operazione può richiedere molto tempo, a seconda della complessità della pagina.This means that each time you revisit the page, it is dynamically reconstructed, which may be time consuming depending on the complexity of the page. In questo caso, il costo di archiviazione nel journal è basso, ma il tempo necessario per la ricostruzione della pagina è potenzialmente lungo.In this case, the journal storage cost is low, but the time to reconstitute the page is potentially high.

Con la navigazione tramite un oggetto, nel journal viene archiviata l'intera struttura ad albero visiva dell'oggetto.When you navigate using an object, the journal stores the entire visual tree of the object. Ogni volta che la pagina viene rivisitata, quindi, ne viene immediatamente eseguito il rendering, senza che debba essere ricostruita.This means that each time you revisit the page, it renders immediately without having to be reconstructed. In questo caso, il costo di archiviazione nel journal è alto, ma il tempo necessario per la ricostruzione della pagina è ridotto.In this case, the journal storage cost is high, but the time to reconstitute the page is low.

Quando si utilizza l'oggetto NavigationWindow, è necessario tenere presente il modo in cui il supporto per il Journal influisca sulle prestazioni dell'applicazione.When you use the NavigationWindow object, you will need to keep in mind how the journaling support impacts your application's performance. Per altre informazioni, vedere Cenni preliminari sulla navigazione.For more information, see Navigation Overview.

Hit testing su superfici 3D ampieHit Testing on Large 3D Surfaces

L'hit testing su superfici 3D ampie presenta requisiti particolarmente elevati in termini di consumo della CPU,Hit testing on large 3D surfaces is a very performance intensive operation in terms of CPU consumption. soprattutto se alla superficie 3D viene aggiunta un'animazione.This is especially true when the 3D surface is animating. Se l'hit testing su queste superfici non è necessario, quindi, è opportuno disabilitarlo.If you do not require hit testing on these surfaces, then disable hit testing. Gli oggetti derivati da UIElement possono disabilitare l'hit testing impostando la proprietà IsHitTestVisible su false.Objects that are derived from UIElement can disable hit testing by setting the IsHitTestVisible property to false.

Evento CompositionTarget.RenderingCompositionTarget.Rendering Event

L'evento CompositionTarget.Rendering causa l'animazione continua di WPFWPF.The CompositionTarget.Rendering event causes WPFWPF to continuously animate. Se si usa questo evento, disconnetterlo ogni volta che è possibile.If you use this event, detach it at every opportunity.

Evitare l'uso di ScrollBarVisibility=AutoAvoid Using ScrollBarVisibility=Auto

Quando possibile, evitare di utilizzare il valore ScrollBarVisibility.Auto per le proprietà HorizontalScrollBarVisibility e VerticalScrollBarVisibility.Whenever possible, avoid using the ScrollBarVisibility.Auto value for the HorizontalScrollBarVisibility and VerticalScrollBarVisibility properties. Queste proprietà sono definite per gli oggetti RichTextBox, ScrollViewere TextBox e come proprietà associata per l'oggetto ListBox.These properties are defined for RichTextBox, ScrollViewer, and TextBox objects, and as an attached property for the ListBox object. Impostare invece ScrollBarVisibility su Disabled, Hiddeno Visible.Instead, set ScrollBarVisibility to Disabled, Hidden, or Visible.

Il valore Auto è destinato ai casi in cui lo spazio è limitato e le barre di scorrimento devono essere visualizzate solo quando necessario.The Auto value is intended for cases when space is limited and scrollbars should only be displayed when necessary. Ad esempio, può essere utile usare questo valore ScrollBarVisibility con una ListBox di 30 elementi, anziché un TextBox con centinaia di righe di testo.For example, it may be useful to use this ScrollBarVisibility value with a ListBox of 30 items as opposed to a TextBox with hundreds of lines of text.

Configurare il servizio Cache tipi di carattere per ridurre il tempo di avvioConfigure Font Cache Service to Reduce Start-up Time

Il servizio cache dei tipi di carattere WPF condivide i dati di tipo carattere tra le applicazioni WPF.The WPF Font Cache service shares font data between WPF applications. La prima applicazione WPF eseguita avvia il servizio se il servizio non è già in esecuzione.The first WPF application you run starts this service if the service is not already running. Se si utilizza Windows Vista, è possibile impostare il servizio "Windows Presentation Foundation (WPF) font cache 3.0.0.0" da "Manual" (impostazione predefinita) a "Automatic (avvio ritardato)" per ridurre il tempo di avvio iniziale delle applicazioni WPF.If you are using Windows Vista, you can set the "Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" service from "Manual" (the default) to "Automatic (Delayed Start)" to reduce the initial start-up time of WPF applications.

Vedere ancheSee also