2011-01-27 8 views
5

Podczas projektowania części interfejsu użytkownika lub aplikacji Silverlight możemy zastosować transformacje wyświetlania (LayoutTransform lub RenderTransform) do elementów wizualnych. Niektóre z tych przekształceń to:Wpływ układu WPF (Silverlight) Przekształcanie wydajności aplikacji

  • RotateTransform
  • ScaleTransform
  • SkewTransform
  • TranslateTransform

Zastanawiam się, w jakim stopniu stosując takie transformacje spowolnić rendering stronę?

Aby być bardziej szczegółowe. Na przykład mam tysiąc prostych elementów, powiedzmy prostokąty, na stronie, które są umieszczane w wierszach, za pomocą siatki i niektórych StackPaneli. Jeśli zastosuję numer RotateTransform na wszystkich lub niektórych z nich, czy będzie to miało zauważalny wpływ na wydajność mojej aplikacji?

Mogę, oczywiście, spróbować zobaczyć, co się stanie, ale być może są rzeczy oczywiste, których po prostu nie jestem świadomy.

Odpowiedz

1

Oto prototyp można użyć do eksperymentowania z różnymi opcjami:

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

i generatora danych:

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

i rogu lewy górny ręka wygląda następująco:

transform performance

Możesz uruchomić układ, zmieniając rozmiar e okno i na mojej maszynie to jest trochę powolne, ale użyteczne. Następnie możesz przetestować inne pojemniki, inne przekształcenia, układ i transformatę renderowania, itp., Aby zobaczyć, jakie różnice tworzą.

1

Układ LayoutTranform spowoduje pełne przejście układu układu. Spowoduje to, że wszystkie obiekty na ekranie zostaną ponownie przeanalizowane i uporządkowane. Jest to operacja matematycznie intensywna, która jest proporcjonalna do liczby obiektów na ekranie.

Jeśli nie jest to potrzebne, użycie opcji RenderTransform będzie szybsze, ponieważ nie spowoduje pełnego przejścia układu. Wpływ korzystania z jednego z nich będzie zależał od sytuacji dotyczącej tego, jakie inne obiekty są wyświetlane na ekranie i do których transformacja musi się odnosić.

Powiązane problemy