0

WPF 三角形をレンダリング/回転するときにパフォーマンスの問題が発生しています

表示されている WPF 三角形があり、中心点を中心にある程度回転する場合、次の 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. 毎回「同じ」三角形を生成し、RenderTransform (Rotate) を使用してそれが属する場所に配置します。この場合、回転計算がどのように行われているかを知ることができないため、回転計算は難読化されています。

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

私の質問は、どちらが速いですか?

自分でテストする必要があることはわかっていますが、そのような粒度でオブジェクトのレンダリング時間を測定するにはどうすればよいですか。フォームの実際のレンダリング時間を計測できる必要がありますが、再描画を開始するのは私ではないため、開始時間を把握する方法がわかりません。

4

2 に答える 2

0

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

于 2009-05-06T20:54:56.030 に答える
0

次のようにフォームの OnPaint メソッドをオーバーライドできます (疑似コード):

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

    base.OnPaint(...);

    // Stop timer
 }

それとも私は信じられないほど素朴ですか?

于 2009-08-26T19:59:47.500 に答える