Laden...

Performantes Zeichnen von sehr vielen Objekten

Erstellt von FullyScaled44 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.362 Views
F
FullyScaled44 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren
Performantes Zeichnen von sehr vielen Objekten

Hallo,
ich bin recht frisch in die Entwicklung mit C# eingetaucht, habe aber bereits mit anderen Sprachen wie Java und Phyton Erfahrungen gesammelt. Im WPF-Kontext bin ich allerdings komplett unwissend und stehe nun vor folgendem Problem:

Mit welchem Ansatz lassen sich in einer WPF-Anwendung mit C# möglichst performant eine große Anzahl an einfachen grafischen Objekten (Vierecke, Dreiecke, usw.) zeichnen?
Da ich gut und gerne mehrere Zehntausende Objekte zeichnen möchte, liegt der Fokus wirklich rein auf der Performance. Wie geht man sowas an?

Ich wäre über entsprechende Stichpunkte/Hinweise, mit denen ich mich dann selbst weiter auf die Suche und Recherche begeben kann, sehr dankbar 😃

Liebe Grüße
FullyScaled

C
2.121 Beiträge seit 2010
vor 7 Jahren

Canvas und seine Zeichenmethoden, das in ein Bild zeichnen und dieses Bild erst nach vollendetem Zeichnen auf den Bildschirm kopieren.

NICHT pro Objekt ein visuelles Element erstellen und das auf den Bildschirm setzen.

Vielleicht gibt es noch eine bestimmte Logik in deiner Anwendung, anhand der du einige Objekte ignorieren kannst weil sie nicht sichtbar sind?

5.299 Beiträge seit 2008
vor 7 Jahren

Man kann allerlei Figuren in eine einzige PathGeometry reinstopfen - das kann man dann mit einem einzigen Path-Visual darstellen.
Ob das besonders performant ist, weiß ich nicht - aber glaub performanter als viele einzelne Visuals.

Ein anderer Ansatz wäre, ein UIElement zu beerben, und im OnRender-Override selbst iwas zu malen.

Der frühe Apfel fängt den Wurm.

W
872 Beiträge seit 2005
vor 7 Jahren

Ich würde mir WriteableBitmapEx anschauen - ob die Bibliothek für Dich passt, musst Du selber ausprobieren - aber das gibt Dir auf jeden Fall Denkanstösse.

F
FullyScaled44 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Hallo,
vielen lieben Dank für eure Antworten!

Momentan benutze ich einzelne DrawingVisual-Objekte, die in einem HostContainer (abgeleitet von der Klasse FrameWorkElement) abgelegt sind und entsprechend nacheinander einzeln gezeichnet werden.

DrawingVisuals sind ja eigentlich schon recht performante grafische Objekte. Ich habe Sie vor allem deswegen ausgewählt, weil sich das Anzeigen von einzelnen Tooltips beim MouseOver damit noch recht trivial umsetzen lässt.

Die WritableBitmapEx Library schaue ich mir gerade an. Sieht sehr vielversprechend aus. Hierbei muss ich allerdings schauen, wie das mit den ToolTips zu lösen ist und ob ich einzelne visuelle Objekte, ohne komplett neuzeichnen zu müssen, entfernen kann.

Für weitere Anregungen bin ich natürlich sehr dankbar!

16.827 Beiträge seit 2008
vor 7 Jahren

Du überzeichnest damit aber die Elemente, was viel Performance kostet.
Zeichne nur das, was Du zeichnen musst / willst.

F
FullyScaled44 Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Momentan zeichne ich noch auf kompletter horizontaler Breite, also auch Bereiche die momentan gar nicht sichtbar sind, das stimmt.

Aber was meinst du mit dem Überzeichnen der Elemente, was ich vermeiden sollte?