Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

Optimizar el rendimiento: Otras recomendaciones

 

Publicada: junio de 2016

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 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.

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.

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

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.

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.

Mostrar: