4

ダッシュパターンのペンを使用できるように、誰かがこれに光を当ててくれることを願っていますか?

Xを使用して、WPFでスクロール可能なチャート (を実装するPanel内部) を作成しています。それらをホストする で使用してスクロールする数千の があります。その上に を配置し、//を使用して一方の端から他方の端まで単純な水平線を描画することでグリッドを実装しました(注: これらの線は常に静的であり、移動することはありません)。ScrollViewerIScrollInfoDrawingVisualDataContext.DrawDrawingVisualTranslateTransformPanelPanelDataContext.DrawLine(pen, new Point(0, y), new Point(widthOfPanel, y));

スクロールのパフォーマンスはまったく正気ではありません (つまり、DrawingVisual は即座に描画され、スクロールも瞬時に行われます)。しかしPen、グリッド ラインを描画するために破線パターン (たとえば、以下を参照) を使用する を使用すると、スクロールが非常にぎくしゃくし、パフォーマンスが 100 分の 1 に低下したように見えます (推定値)。なぜそれが起こるのか、どうすればこれを回避できるのか、誰でも説明できますか?

破線パターンのペンの例:

<Pen x:Key="PenUsingDashPatterns" Brush="Black" Thickness="1">
   <Pen.DashStyle >
      <DashStyle Dashes="3, 3" />
   </Pen.DashStyle>
</Pen>
4

4 に答える 4

6

考えられる回避策は次のとおりです。水平線または垂直線のみを描画している場合は、次のようなPenチェッカー パターンを作成してみてください。DrawingBrush

  <Pen x:Key="PenUsingDashPatterns" Thickness="1">
        <Pen.Brush>
            <DrawingBrush TileMode="Tile" 
                          Viewport="0 0 6 6" ViewportUnits="Absolute">
                <DrawingBrush.Drawing>
                    <GeometryDrawing Brush="Black">
                        <GeometryDrawing.Geometry>
                            <GeometryGroup>
                                <RectangleGeometry  Rect="0 0 3 3"/>
                                <RectangleGeometry  Rect="3 3 3 3"/>
                            </GeometryGroup>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                </DrawingBrush.Drawing>
            </DrawingBrush>
        </Pen.Brush>
    </Pen>   

または、垂直線と水平線に異なるブラシを使用することも、ImageBrushパフォーマンスを向上させるために を使用することもできます。

于 2009-04-13T16:48:22.727 に答える
3

パフォーマンスの問題をより深く掘り下げるには、Perforator を使用する必要があります。これは、さまざまなWPF パフォーマンス ツールについて説明している MSDN サイトへのリンクです。Perforator はおそらく、特に線がソフトウェア レンダラーを使用して描画されているかどうかを判断するのに最も役立つツールです (これは、パフォーマンスが低下する最大の要因です)。

問題がソフトウェアで描画されていることにある場合は、独自のShaderEffectを作成する必要があるかもしれませんが、HLSL に精通していない限り、それはおそらくすぐに難しくなります。

于 2009-04-13T15:31:26.780 に答える
2

おそらくこれは、この特定の描画操作がビデオ カードに委譲できるものではないためです。これにより、メモリ内のコンポジションとビデオ カードへのブリッティングが強制されます。

于 2009-04-08T14:58:49.157 に答える