2011-01-27 18 views
5

Al diseñar la interfaz de usuario de la aplicación WPF o Silverlight, podemos aplicar algunas transformaciones de visualización (LayoutTransform o RenderTransform) a elementos visuales. Algunas de estas transformaciones son:Impacto del diseño de WPF (Silverlight) Transformar en el rendimiento de la aplicación

  • RotateTransform
  • ScaleTransform
  • SkewTransform
  • TranslateTransform

Me pregunto en qué medida el uso de tales transformaciones ralentizan la prestación de una página?

Para ser más específicos. Por ejemplo, tengo mil elementos simples, por ejemplo, rectángulos, en una página, que se ponen en filas, usando una cuadrícula y algunos paneles de apilamiento. Si aplico un RotateTransform en todos o algunos de ellos, va a tener el impacto notable en el rendimiento de mi solicitud?

puedo, por supuesto, tratar de ver qué va a pasar, pero tal vez hay cosas evidentes que simplemente no sepa.

Respuesta

1

Aquí es un prototipo que puede utilizar para experimentar con diferentes opciones:

<Grid> 
    <Grid.Resources> 
     <local:Range x:Key="sampleData" Minimum="1" Maximum="900"/> 
    </Grid.Resources> 
    <ItemsControl ItemsSource="{StaticResource sampleData}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <UniformGrid Rows="30" Columns="30"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding}" FontSize="8"> 
        <TextBlock.LayoutTransform> 
         <RotateTransform Angle="30"/> 
        </TextBlock.LayoutTransform> 
       </TextBlock> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 

y un generador de datos:

class Range : List<int>, ISupportInitialize 
{ 
    public int Minimum { get; set; } 
    public int Maximum { get; set; } 

    public void BeginInit() { } 

    public void EndInit() 
    { 
     for (int i = Minimum; i <= Maximum; i++) Add(i); 
    } 
} 

y la esquina superior izquierda se ve así:

transform performance

Usted puede desencadenar un diseño cambiando el tamaño XX La ventana y en mi máquina es un poco lenta pero utilizable. Luego puede probar otros contenedores, otras transformaciones, diseño frente a transformación de renderizado, etc. para ver qué diferencias hacen.

1

Un LayoutTranform hará un recorrido completo en el sistema de diseño. Esto hará que todos los objetos en pantalla se vuelvan a medir y reorganizar. Esta es una operación matemáticamente intensiva que es proporcional a la cantidad de objetos en pantalla.

Si esto no es lo que necesita a continuación, utilizando RenderTransform sería más rápido, ya que no causa un pase diseño completo. El impacto de usar uno sobre el otro dependerá de la situación con respecto a qué otros objetos se muestran en la pantalla y a qué se debe aplicar la transformación.

Cuestiones relacionadas