Laden...

Performance nach erzeugung von 25 Paths im Keller

Erstellt von Neidhard vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.100 Views
N
Neidhard Themenstarter:in
135 Beiträge seit 2006
vor 12 Jahren
Performance nach erzeugung von 25 Paths im Keller

Hallo,
ich erstelle per Code 25 Paths mit jeweils um die 300Punkten.
Die Paths stellen Linien durch Stroke dar und sind nicht geschlossen.
Das ist ja eigentlich nicht viel, aber schlägt sich irgendwie ungemein auf die Anzeigeperformance nieder. Scrollen ist damit eine Qual.
Freezen kann ich ausser den Datenpunkten und dem Stroke nichts, und bei den 2 Sachen bringt das auch nichts.
Ich hab auch schon versucht über RenderTargetBitmap ein Bild zu erstellen, aber von dem ganzen usercontroll, welches die Paths darstellt, ist nur das drumherum zu sehen. Nicht aber die Paths selber. grrrr

Hat zufällig jemand eine Lösung und Ratschläge zur Vergesserung der Anzeigegeschwindigkeit?

B
387 Beiträge seit 2005
vor 12 Jahren

Hi Neidhard,

owei, 25 Paths * 300 Punkte = 7500 Linien.
Kommt ganz schön was für deine Grafikkarte zusammen.

Versuche das am Besten in einen Brush zu packen. Bei WPF gibts ja diese VisualBrush, ...Brush Objekte. Diese sorgen dafür, dass es im Hintergrund einmal auf eine Textur gerendert wird und dann erst wieder, wenn sich wirklich was an den Punkten ändert.

Ich schätze mal, dass bei deiner jetzigen lösung bei jedem Bild alle Punkte/Linien einzeln gerendert werden. Und das ist - je nachdem, welche Grafik-Hardware du hast - schlecht.

Gruß
Roland

N
Neidhard Themenstarter:in
135 Beiträge seit 2006
vor 12 Jahren

Den VisualBrush hab ich nun getestet. da kommt aber völliger Quatsch raus.
Hier erst mal meine VisualBrush-Einbingung:


            <Grid Grid.Column="1" Margin="0,0,0,0">
                <Grid.Background>
                    <VisualBrush >
                        <VisualBrush.Visual>
                            <Grid x:Name="gridLinien" Margin="0,0,0,0"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Grid.Background>
            </Grid>

Statt der eigentlichen Darstellung der Paths kommt das im Anhang zu sehende Ergebnis raus.

N
Neidhard Themenstarter:in
135 Beiträge seit 2006
vor 12 Jahren

Ich hab das ganze jetzt anders gemacht.
Die Linien zeichne ich nun per drawingContext.DrawLine.


DrawingVisual drawingVisual = new DrawingVisual();
                DrawingContext drawingContext = drawingVisual.RenderOpen();
                for (int l = 0; l < Linien.Count; l++)
                {
                    Pen pen = new Pen(new SolidColorBrush(Linien[l].LinienFarbe), 1);
                    for (int p = 1; p < Linien[l].Punkte.Count - 1; p++)
                    {
                        drawingContext.DrawLine(pen, Linien[l].Punkte[p], Linien[l].Punkte[p + 1]);
                    }
                }
                drawingContext.Close();
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)gridLinien.ActualWidth, (int)gridLinien.ActualHeight, 96, 96, PixelFormats.Pbgra32);
                bmp.Render(drawingVisual);
                gridLinien.Background = new ImageBrush(bmp);

Da das Ganze nun als Grafik angezeigt wird gibts keine Probleme mehr beim verschieben.

B
387 Beiträge seit 2005
vor 12 Jahren

Oder so.. das geht auch.
Beim VisualBrush musst du einen sinnvolle Größe setzen (Width und Height). So wie ich das sehe, ist der bei dir einfach zu klein.

Gruß
Roland