Laden...

ListView vs. DataGrid | Bedienung gegen Performance

Erstellt von trib vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.409 Views
T
trib Themenstarter:in
708 Beiträge seit 2008
vor 9 Jahren
ListView vs. DataGrid | Bedienung gegen Performance

Hallo zusammen,

ich stehe vor einer Glaubensfrage.
Für ein äußerst schwaches Endgerät, muss ich eine möglichst performante Lösung finden, um Daten darzustellen.
Dabei steht mir nur das Compact Framework 2.0 zur Verfügung.

DataGrid:
(Nein, nicht "View". Das gibt es unter CE leider nicht)
Die Vorteile des DataGrids liegen im DataBinding. Das ist ziemlich flott.
Jedoch gibt es wenig Möglichkeiten zum einfärben von Zeilen. Der Anpassung der Spaltenbreiten, Seitenweise scrollen, usw.
Also habe ich mir eine Hilfsklasse gebaut, die das alles ermöglicht. Natürlich ist die nicht sonderlich performant. Gerade beim Scrollen wird es sehr ruckelig.
Man sieht wie Zeile für Zeile die Farbe drüber gezeichnet wird.

ListView:
Eine ListView bietet schon einige Möglichkeiten von Haus aus mehr. Es gibt aber kein DataBinding!
Also muss ich per Schleife alle Daten manuell als ListViewItem und darin als SubItem erstellen.
Das Dauert ewig lange. Auf der anderen Seite, sind die Daten einmal geladen, scrollt es sich hervorragend in der ListView.

Mittlerweile habe ich ein Ergebnis, wo beide Lösungen nahezu identisch aussehen und sich auch gleich bedien lassen.
Habe ich ca. 5-10 Datensätze schlägt die ListView das DataGrid um Längen (50Ms zu 200MS).
Lade ich jedoch 200 Datensätze á 10 Spalten, so geht der Punkt 400MS zu 2.000MS an das DataGrid.
Wobei, wie schon angesprochen, das DG nun beim Scrollen sehr alt aussieht.

Für mich kommt eigentlich nicht in Frage beides zu verwenden, da es zwar ähnlich aber nicht identisch aussieht. Für den Anwender natürlich verwirrend.
Dass langsames Scrollen ein No-Go ist, sehe ich ein. Aber 2 Sekunden warten zu müssen, ebenfalls...

Habt Ihr etwas Erfahrung in dem Thema? Wozu würdet Ihr tendieren?

Hinweis von herbivore vor 9 Jahren

Vorsorglich: Glaubenfragen sachlich diskutieren, kein Problem; Glaubenskrieg führen, bitte nicht.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo trib,

gibt es im CE ListView.BeginUpdate und hast du das bereit verwendet? Falls noch nicht: Löst das dein Performance-Problem beim Füllen? Wenn nicht, könntest du das Füllen in einen extra Thread verlagern, wobei die eigentlichen Zugriffe natürlich wieder im GUI-Thread erfolgen müssen, aber der extra Thread kann das Füllen in ausreichend kleine Häppchen unterteilen, so dass das GUI bedienbar bleibt.

herbivore

1.378 Beiträge seit 2006
vor 9 Jahren

Hallo trib,

vielleicht hilfts die ListView im VirtualMode laufen zu lassen.

Lg, XXX

T
trib Themenstarter:in
708 Beiträge seit 2008
vor 9 Jahren

Hallo herbivore,

ein kleiner, aber feiner Tipp! Zwar dachte ich, dass es ausreicht, dass mit SuspendLayout() das Zeichnen unterbunden wird. Aber BeginUpdate() scheint noch eine ordentliche Schippe drauf zu legen:
Mit 432MS
Ohne 1.748MS

Hallo xxxprod,

leider gibt es das nicht für das Compact Framework. Aber prinzipiell entspricht dies ja dem 2. Vorschlage von herbivore.
Nur so viel laden, wie man sieht und entweder beim Scrollen nachladen oder in einen Background-Tread auslagern.
Das erfordert aber größere Anpassungen in meiner Struktur. Wie sich das bemerkbar macht (Scrollbar ändert die Größe, Invoke ist langsam, verspringen vom Fokus, usw.) muss ich mal ausprobieren.

Vielen Dank schonmal!

Zwei sehr interessante Links haben mir übrigens gut geholfen die Geschwindigkeit zu optimieren:
Optimization - Part 1
Optimization - Part 2