Optimizar el rendimiento: Otras recomendaciones

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

Este tema contiene las siguientes secciones:

  • Opacidad en los pinceles comparada con opacidad en los elementos

  • Navegación hasta un objeto

  • Pruebas de posicionamiento en superficies 3D de gran tamaño

  • Evento CompositionTarget.Rendering

  • Evitar el uso de ScrollBarVisibility=Auto

  • Configurar el servicio de almacenamiento en memoria caché de las fuentes para reducir el tiempo de inicio

Opacidad en los pinceles comparada con opacidad en los elementos

Cuando se utiliza un objeto Brush para establecer la propiedad Fill o Stroke de un elemento, es mejor establecer el valor de Brush.Opacity en lugar de la propiedad Opacity del elemento. Modificar la propiedad Opacity de un elemento puede hacer que WPF cree una superficie temporal.

El objeto NavigationWindow se deriva de la clase Window y la extiende aportando compatibilidad de navegación de contenido, gracias, principalmente, a la adición de NavigationService y del diario. Puede actualizar el área cliente de NavigationWindow especificando un uniform resource identifier (URI) o un objeto. En el ejemplo siguiente se muestran ambos métodos:

        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
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;
}

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

Cuando se navega mediante uniform resource identifier (URI), el diario almacena sólo la referencia al uniform resource identifier (URI). Esto significa que cada vez que se vuelve a visitar la página, se reconstruye dinámicamente, lo que puede tardar tiempo según complejidad de la página. En este caso, el costo de almacenamiento en el diario es bajo, pero el tiempo de reconstitución de la página es potencialmente alto.

Cuando se navega mediante un objeto, el diario almacena el árbol visual completo del objeto. Esto significa que cada vez que vuelve a visitar la página, se representa inmediatamente sin tener que reconstruirla. En este caso, el costo de almacenamiento en el diario es alto, pero el tiempo de reconstitución de la página es bajo.

Cuando se utiliza el objeto NavigationWindow, es preciso tener presente cómo afecta la compatibilidad con el diario al rendimiento de la aplicación. Para obtener más información, consulte Información general sobre navegación.

Pruebas de posicionamiento en superficies 3D de gran tamaño

Las pruebas de posicionamiento en superficies 3D de gran tamaño es una operación que afecta intensamente al rendimiento por lo que se refiere al consumo de CPU. Esto se cumple especialmente cuando la superficie 3D se anima. Deshabilite las pruebas de posicionamiento en estas superficies si no las necesita. Los objetos que se derivan de UIElement pueden deshabilitar las pruebas de posicionamiento estableciendo la propiedad IsHitTestVisible en false.

Evento CompositionTarget.Rendering

El evento CompositionTarget.Rendering hace que WPF se anime de manera continua. Si utiliza este evento, desasócielo en cada oportunidad que se presente.

Evitar el uso de ScrollBarVisibility=Auto

Siempre que sea posible, evite utilizar el valor ScrollBarVisibility.Auto para las propiedades HorizontalScrollBarVisibility y VerticalScrollBarVisibility. Estas propiedades se definen para los objetos RichTextBox, ScrollViewer y TextBox, además de cómo propiedad adjunta del objeto ListBox. En su lugar, establezca ScrollBarVisibility en Disabled, Hidden o Visible.

El valor Auto es para casos de espacio limitado, en que las barras de desplazamiento sólo deben mostrarse cuando se necesiten. Por ejemplo, puede ser útil utilizar este valor de ScrollBarVisibility con un control ListBox de 30 elementos, en oposición a un control TextBox con centenares de líneas de texto.

Configurar el servicio de almacenamiento en memoria caché de las fuentes para reducir el tiempo de inicio

El servicio WPF Font Cache comparte los datos de fuentes entre las aplicaciones de WPF. La primera aplicación de WPF que se ejecuta inicia este servicio aún no está en ejecución. Si utiliza Windows Vista, puede establecer el servicio "Windows Presentation Foundation (WPF) Font Cache 3.0.0.0" de "Manual" (el valor predeterminado) a "Automático (inicio retrasado)" para reducir el tiempo de inicio de las aplicaciones de WPF.

Vea también

Conceptos

Planear para mejorar el rendimiento de aplicaciones

Optimizar el rendimiento: Aprovechar el hardware

Optimizar el rendimiento: Presentación y diseño

Optimizar el rendimiento: Imágenes y gráficos 2D

Optimizar el rendimiento: Comportamiento de objetos

Optimizar el rendimiento: Recursos de aplicación

Optimizar el rendimiento: Texto

Optimizar el rendimiento: Enlace de datos

Sugerencias y trucos para animaciones