0

2 つのバージョンの線描画コードを実装しました。1 つは WPF 図形 (線) を使用し、もう 1 つは StreamGeometry と DrawingVisual を使用します。

DrawingVisual の方が高速である必要がありますが、正反対のことがわかりました。DrawingVisual オブジェクトを含むホスト ウィンドウの最初の描画とその後のサイズ変更は、WPF の行の例よりもはるかに遅く、ぎくしゃくしています。

私は何を間違っていますか?

WPF 行コード:

    Dim Rand As New Random

    For i As Integer = 1 To 1000

        Dim Line As New Line
        Line.X1 = Rand.NextDouble * 500
        Line.X2 = Rand.NextDouble * 500
        Line.Y1 = Rand.NextDouble * 500
        Line.Y2 = Rand.NextDouble * 500
        Line.Stroke = Brushes.Black
        Line.StrokeThickness = 0.25
        BaseGrid.Children.Add(Line)

    Next

DrawingVisual コード:

描画ビジュアル ホスト コントロール:

Public Class VisualHost

    Inherits FrameworkElement

    Dim Visual As New DrawingVisual()
    Dim Context As DrawingContext
    Dim Pen As Pen

    Dim rand As New Random

    Public Sub New()

        Pen = New Pen(Brushes.Black, 0.25)
        Pen.Freeze()

        AddVisualChild(Visual)

    End Sub

    Public Sub Draw()

        Dim Geometry As New StreamGeometry()

        Using GeometryContext As StreamGeometryContext = Geometry.Open()

            GeometryContext.BeginFigure(New Point(rand.NextDouble * 500, rand.NextDouble * 500), False, False)

            For i As Integer = 1 To 1000

                GeometryContext.LineTo(New Point(rand.NextDouble * 500, rand.NextDouble * 500), True, True)

            Next

        End Using

        Geometry.Freeze()

        Using Context = Visual.RenderOpen()
            Context.DrawGeometry(Nothing, Pen, Geometry)
        End Using

    End Sub

    Protected Overrides ReadOnly Property VisualChildrenCount() As Integer
        Get
            Return 1
        End Get
    End Property

    Protected Overrides Function GetVisualChild(index As Integer) As Visual
        Return Visual
    End Function

End Class

VisualHost をグリッドに割り当てる:

Private Host As New VisualHost
BaseGrid.Children.Add(Host)
Host.Draw()
4

0 に答える 0