2011-01-27 8 views
5

WPFまたはSilverlightアプリケーションのUI部分を設計する際、視覚要素にいくつかの表示変換(LayoutTransformまたはRenderTransform)を適用できます。これらの変換の一部です:WPF(Silverlight)レイアウト(レンダリング)の影響アプリケーションパフォーマンスへの変換

  • RotateTransform
  • ScaleTransform
  • SkewTransform
  • TranslateTransformの

私は、どの程度のページのレンダリングが遅く、このような変換を使用するだろうか?

具体的には、たとえば、グリッドとStackPanelsを使用して、行に置かれたページ上に1000個の単純な要素、つまり矩形などがあります。 RotateTransformを全部または一部に適用すると、アプリケーションのパフォーマンスに著しい影響を及ぼしますか?

私はもちろん、何が起こるか試してみることができますが、多分私が気づいていない明白なものがあります。ここで

答えて

1

では、さまざまなオプションを試すために使用できるプロトタイプです:

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

とデータ・ジェネレータ:

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

と左上隅には、次のようになります。

transform performance

レイアウトをトリガーするには、th私のマシン上では、ちょっと遅くても使える。次に、他のコンテナ、他のトランスフォーム、レイアウトとレンダリングの変換などをテストして、それらの違いを確認することができます。

1

LayoutTranformは、レイアウトシステムでフルパスを発生させます。これにより、画面上のすべてのオブジェクトが再測定され、再配置されます。これは、オンスクリーンオブジェクトの数に比例する数学的に集中的な操作です。

これが必要なものでない場合、RenderTransformを使用すると、完全なレイアウトパスが発生しないため、高速になります。もう一方を使用することの影響は、画面に表示される他のオブジェクトと、変換が適用される必要があるオブジェクトに関する状況によって異なります。

関連する問題