Optimizar el rendimiento: Otras recomendaciones

En este tema se proporcionan recomendaciones de rendimiento, además de las que se incluyen en los temas de la sección Optimizar WPF: Rendimiento de aplicaciones.

Este tema contiene las siguientes secciones:

Opacidad en pinceles frente a opacidad en elementos

Cuando se usa Brush para establecer el Fill o Stroke de un elemento, es mejor establecer el valor de la Brush.Opacity en lugar de establecer la Opacity propiedad del elemento. La modificación de la propiedad Opacity de un elemento puede hacer que WPF cree una superficie temporal.

El objeto NavigationWindow se deriva desde Window y lo amplía con soporte de navegación de contenido, principalmente por agregación de NavigationService y el diario. Puede actualizar el área de cliente de NavigationWindow si especifica un identificador uniforme de recursos (URI) o un objeto. En el ejemplo siguiente se muestran ambos métodos:

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

Cada objeto NavigationWindow tiene un diario que registra el historial de navegación del usuario en esa ventana. Uno de los propósitos del diario es permitir que los usuarios vuelvan sobre sus pasos.

Cuando se navega con un identificador uniforme de recursos (URI), el diario almacena solo la referencia del URI. Esto significa que, cada vez que vuelve a visitar la página, se reconstruye dinámicamente, lo que puede llevar mucho tiempo según la complejidad de la página. En este caso, el costo de almacenamiento del diario es bajo, pero el tiempo para reconstituir la página es potencialmente alto.

Al navegar con un objeto, el diario almacena todo el árbol visual del objeto. Esto significa que, cada vez que vuelve a la página, se representa inmediatamente sin tener que reconstruirla. En este caso, el costo de almacenamiento del diario es alto, pero el tiempo para reconstituir la página es bajo.

Al usar el objeto NavigationWindow, debe tener en cuenta cómo afecta el soporte diario al rendimiento de la aplicación. Para obtener más información, consulte Información general sobre navegación.

Comprobación de visitas en superficies 3D de gran tamaño

La comprobación de visitas en superficies 3D de gran tamaño es una operación muy intensiva de rendimiento en términos de consumo de CPU. Esto es especialmente cierto cuando se anima la superficie 3D. Si no es necesario comprobar visitas en estas superficies, deshabilite la comprobación de visitas. Los objetos que se derivan de UIElement pueden deshabilitar la comprobación de visitas al establecer la propiedad IsHitTestVisible afalse.

Evento CompositionTarget.Rendering

El evento CompositionTarget.Rendering hace que WPF se anime continuamente. Si usa este evento, desasócielo en cada oportunidad.

Evitar usar ScrollBarVisibility=Auto

Siempre que sea posible, evite usar el valorScrollBarVisibility.Auto para la HorizontalScrollBarVisibility y las propiedades VerticalScrollBarVisibility. Estas propiedades se definen para los objetos RichTextBox, ScrollViewer y TextBox, como una propiedad adjunta para el objeto ListBox. En su lugar, establezca ScrollBarVisibility en Disabled, Hidden o Visible.

El valor Auto está pensado para casos en los que el espacio es limitado y las barras de desplazamiento solo deben mostrarse cuando sea necesario. Por ejemplo, puede ser de utilidad usar este valor ScrollBarVisibility con una ListBox de 30 elementos en lugar de una TextBox con cientos de líneas de texto.

Configurar el servicio de caché de fuente para reducir el tiempo de inicio

El servicio WPF de caché de fuente comparte los datos de las fuentes entre las aplicaciones WPF. La primera aplicación WPF que se ejecuta es la que inicia este servicio, si es que no se está ejecutando ya. Si está usando Windows Vista, puede configurar el servicio "Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" de "Manual" (el valor predeterminado) a "Automático (inicio con retraso)" para reducir el tiempo de arranque inicial de las aplicaciones WPF.

Vea también