Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Grafikperformance von Virtual Treeview

  Alt 15. Mär 2019, 09:36
Hallo!

Ich verwende den VST per Grid Extensions als Virtual Grid. Dabei ist mir aufgefallen, dass die Darstellungsperformance des aktuellen VST ziemlich schlecht ist. Das tritt unter bestimmten Konstellationen teilweise extrem zu Tage und ist stark von der Hardware abhängig. Weil mich das Thema interessiert hat, habe ich auf verschiedenen Maschinen Tests gemacht. Dabei konnte ich folgenden Zusammenhang feststellen:

Auf halbwegs aktuellen Rechnern mit dedizierter (gesteckter) Graka und nativ 1980x1080 bedient sich so ein Grid (insbesondere beim vertikalen Scrollen) relativ flüssig. Das gilt auch für AMD Ryzen 5 mit integrierter Vega 11. Bei höheren Auflösungen (4K) wird es auf dem Ryzen schon leicht ruckelig. Je schwächer die Graka, umso ruckeliger wird es. Brutal in die Knie geht der VST beim Zeichnen, wenn er auf einem Core i7-7700K auf der iGPU dargestellt wird und das Windows in einer VM läuft. Hier hatte ich nur 128 MB Grafikspeicher konfiguriert. Im Vollbild bei FullHD braucht ein Pagescroll hier fast eine Sekunde um den VST neu zu zeichnen!

Das Problem lässt sich 100%ig auf die "Abteilung Grafik" zurückführen und nicht etwa auf das interne Speichermanagement und CPU-Operationen. Denn dann hätte der Einbau einer dedizierten Graka im Vergleich zur iGPU nicht so einen extremen Unterschied gemacht. Denn alles andere (CPU, RAM, Chipsatz usw.) blieb ja gleich.

Nun stellt sich die Frage: Warum ist das so? Die Interna vom VST ist ja geringfügig unübersichtlich Weshalb ich da noch nicht in die Tiefe eingestiegen bin. Ich vermute aktuell, dass es mit der Art und Weise zu tun hat, wie die Canvas über die Eventhandler gezeichnet wird. Das Ganze ist ja reines GDI, nicht hardwarebeschleunigt. Jedes OnBefore/After/Irgendwas-Paint-Event erzeugt ja wieder ein TCanvas-Objekt, das wiederum nur den jeweiligen Abschnitt der einzelnen Grid-Zelle enthält (andernfalls könnte man ja mit z.B. negativen Koordinaten über die Zelle hinaus zeichnen). Selbst wenn ich keine eigenen Draw-Events einbaue sondern den VST praktisch "bare Metal" nur mit OnGetText (direkt aus einem Array of String, schneller geht kaum) laufen lasse, sieht es nicht spürbar besser aus.

Nun hat der VST ja gerade wegen seiner Virtualisierung den Nimbus besonders guter CPU-Performance. Ich verwende ihn auch sehr gerne und fasse den originalen TTreeView praktisch gar nicht mehr an. Allerdings bin ich angesichts der Grafikperformance aktuell doch ziemlich enttäuscht. Was nützt es, wenn man 100.000 Nodes in Millisekunden erzeugen kann, wenn sie so lahm auf dem Bildschirm gepinselt werden?

Wie sind da eure Erfahrungen? Meinungen?

Viele Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat