2009-05-05 13 views
0

私は、WPFの三角形が表示されていたし、それはセンターポイントを中心にある程度回転する場合WPFはWPF PathGeometryを/ RotateTransform最適化

を三角形回転/レンダリングするとき、私はそれを2のいずれかを行うことができ、パフォーマンスの問題が生じています方法:

  1. プログラムによるポイントを決定し、そのバックエンドでのオフセット、単に彼らが所属するキャンバス上に配置するXAMLを使用し、それは次のようになります。

    <Path Stroke="Black"> 
        <Path.Data> 
         <PathGeometry> 
         <PathFigure StartPoint ="{Binding CalculatedPointA, Mode=OneWay}"> 
          <LineSegment Point="{Binding CalculatedPointB, Mode=OneWay}" /> 
          <LineSegment Point="{Binding CalculatedPointC, Mode=OneWay}" /> 
          <LineSegment Point="{Binding CalculatedPointA, Mode=OneWay}" /> 
         </PathFigure> 
         </PathGeometry> 
        </Path.Data> 
    </Path> 
    
  2. を0
  3. 「同じ」三角形を毎回生成し、それが属している場所にそれを置くためにRenderTransform(回し)を使用します。この場合、回転計算はどのように行われているかについてのアクセス権がないため、難読化されています。

    <Path Stroke="Black"> 
        <Path.Data> 
         <PathGeometry> 
         <PathFigure StartPoint ="{Binding TriPointA, Mode=OneWay}"> 
          <LineSegment Point="{Binding TriPointB, Mode=OneWay}" /> 
          <LineSegment Point="{Binding TriPointC, Mode=OneWay}" /> 
          <LineSegment Point="{Binding TriPointA, Mode=OneWay}" /> 
         </PathFigure> 
         </PathGeometry> 
        </Path.Data> 
        <Path.RenderTransform> 
         <RotateTransform CenterX="{Binding Centre.X, Mode=OneWay}" 
             CenterY="{Binding Centre.Y, Mode=OneWay}" 
             Angle="{Binding Orientation, Mode=OneWay}" /> 
        </Path.RenderTransform> 
    </Path> 
    

私の質問は1つが速くなるのですか?

私はそれを自分自身をテストする必要があります知っているが、どのように私は、このような粒度でオブジェクトのレンダリング時間を測定します。私は実際のレンダリング時間がフォームのどれくらいの時間であるかを時間で確認する必要がありますが、私は再描画を開始するものではないので、開始時間をどのようにキャプチャするのか分かりません。

答えて

0

はあなたが穿孔またはVisual ProfilerのいずれかがWPF performance toolsに含まれて使用してみましたか?ドキュメントから、これらのツールはあなたが探している情報を得ることができるはずです。最初の方法でアプリケーションをビルドし、これらのツールでテストし、パフォーマンス情報を書き留めてから、アプリケーションをもう一度やり直して、比較する2番目の方法を構築する必要があります。

private void OnPaint(...) 
{ 
    // Start timer 

    base.OnPaint(...); 

    // Stop timer 
} 

か、私は非常にナイーブされています:あなたは、この(擬似コード)のような形ののOnPaintメソッドをオーバーライドすることができ