2009-05-29 3 views
1

Ich habe ein Steuerelement, das ein Raster hat. Ist es teurer, die horizontalen und vertikalen Linien, die das Raster bilden, jedes Mal mit der Zeichenlinienfunktion in der Gerätekontextklasse zu zeichnen, oder wäre es schneller, das Raster einmal in einen Speichergerätekontext zu zeichnen und dann jedesmal zu blitten das Fenster dc? Vielen Dank.Ist es weniger kostspielig, DracLine() ein paar Mal oder ein Blit?

Antwort

5

Es hängt von vielen Dingen ab, wie viele Zeilen Sie haben, wie groß das Raster ist und welche Grafikkarte der Benutzer hat.

Ihre beste Wette ist, nur eine von ihnen zu machen (wahrscheinlich DrawLine, die mein Bauchgefühl sagt, wird einfacher und schneller sein) dann teste es auf einer langsamen Maschine. Wenn es funktioniert und es schnell genug ist, optimieren Sie es nicht vorzeitig.

+1

+1: Für Vorschlag, beide zu versuchen und die Ergebnisse aufzuzeichnen - ausgezeichnete Antwort :-) –

+0

Von der "großen programmierenden Anführungsstriche" Frage: "Wir sollten über kleine Effizienzen vergessen, sagen ungefähr 97% der Zeit: vorzeitige Optimierung ist die Wurzel allen Übels." - Donald Knuth –

1

A hatte eine solche Kontrolle und ich zeichnete die Grenze für jede Zelle, wenn es Zeit war, die Zelle zu aktualisieren. (Es ist nur ein alternativer Gedanke)

0

Es hängt auch davon ab, welche Art von Stift Sie verwenden. Für einfache einfarbige horizontale und vertikale Linien sind IIRC-Füllrechtecke normalerweise die schnellsten, aber es sollte ziemlich einfach sein, einen eigenen Benchmark durchzuführen.

2

Eine andere Option: Erstellen Sie einen Pinsel mit dem Raster und nur FillRect() der Bereich. Die meiste Zeit ist dies der schnellste Weg, um es zu tun, aus meiner Erfahrung.

Allerdings hat "RichieHindle" Recht; es gibt keine Notwendigkeit, darüber zu philosophieren, wenn Sie die Tatsachen haben können, indem Sie nur die Geschwindigkeit messen;) ..

+0

das ist schnell, aber funktioniert nicht immer – GorillaApe

0

Kurze Antwort: Letzteres. Blitzen auf einen Speicher-DC einmal, so dass es als Bitmap für nachfolgende Re-Paint-Operationen verwendet werden kann, ist normalerweise der schnellere Ansatz zum Rendern.

0

Blitzen ist eine bevorzugte, da es das Bild im Speicher kopieren würde. Kopieren des Bildes, soll Flackern verhindern, wenn es gezeichnet wird.