![]() |
Grafikperformance von Virtual Treeview
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 |
AW: Grafikperformance von Virtual Treeview
Liste der Anhänge anzeigen (Anzahl: 1)
Ich benutze die VirtualTreeView Komponente auch in fast allen meinen Programmen und bin auch nicht gerade unerfahren mit der Komponente. Aber solch krasse Performance Probleme kenne ich gar nicht. Mein Tipp wäre ja gewesen, dass du da in einem Event etwas zeichnest, was wiederum etwas anderes übermalt und es deshalb zu einer Schleife kommt.
Aber wenn das sogar mit dem reinen GetText Event nicht richtig funktioniert, dann stellt sich mir wirklich die Frage was bei dir schief läuft. :shock: Ich habe Programme geschrieben, in denen ich sogar die Selektion selbst male und in jeder Column noch ein Icon platziert wird (auch selbst gemalt). Der Tree scrollt nicht anders, als wenn ich einfach nur den RootNodeCount setze und kein Event behandele. Allerdings habe ich auf meiner VM in der ich entwickele die Einstellung nicht geändert. Eventuell machen 128MB Grafikspeicher doch den entscheidenden Performanceverlust. Bei mir sind es die empfohlenen 1GB von VMWare (s. Screenshot). Als Grafikkarte habe ich eine GT630 verbaut (auch nicht die beste Karte). Aber keine Probleme. |
AW: Grafikperformance von Virtual Treeview
Ruckeln entsteht bei uns nur, wenn wir die GetText / on*Paint nicht optimal programmiert haben.
z.B. langsame Berechnungen drin haben. Der größte VST hat 120 Spalten und lädt ca. 33000 Zeilen. Da merkt man die Menge, aber nicht so auffällig wie du es beschreibst. |
AW: Grafikperformance von Virtual Treeview
Zitat:
Zitat:
Soeben habe ich noch interessante, aber genauso unerklärliche Zusammenhänge entdeckt: Ist das Formular auf dem der VST liegt maximiert (Windowstate=wsMaximized), sind die "Bremseffekte" ungleich stärker als bei WindowState=wsNormal. Selbst dann, wenn ich das Fenster manuell auf die komplette Größe des Bildschirms ziehe. Zweitens: Auf einem sekundären Bildschirm wird langsamer gezeichnet als auf einem Primärbildschirm. Drittens: Paradoxerweise wird das Geruckel weniger, wenn ich das Form mit dem VST auf DoubleBuffered=True setze. Meine Vermutung geht da in Richtung einer Konstruktionseigenart (möchte nicht von Fehler sprechen) im VST. Dort werden ja ganze Kaskaden von Paint-Events aufgerufen, teilweise mehrfach (an Stage-Werte gebunden). Normalerweise wird da nur ein Zeiger auf das eine Canvas-Objekt des Treeview und ein Rectangle übergeben. Ich möchte aber nicht ausschließen, dass es irgendwo in den Tiefen des VST auch Bitmap-Kopien gemacht werden. Wenn nun viele aufeinander folgende Zeichenoperationen auf einem GDI-Canvas erfolgen und die Videohardware ohnehin langsam ist, hat man anscheinend die beschriebenen Probleme. |
AW: Grafikperformance von Virtual Treeview
Hast du das Problem schon auf Betriebssystemebene/GDI mit dem "Rohitab API Monitor" untersucht?
|
AW: Grafikperformance von Virtual Treeview
Ich arbeite gerade auch mit der Komponente. Welche Version benutzt du? Ich benutze 6.7 und habe keine Probleme soweit.
|
AW: Grafikperformance von Virtual Treeview
Zitat:
Zitat:
|
AW: Grafikperformance von Virtual Treeview
Schon mal mit 7.2 versucht?
|
AW: Grafikperformance von Virtual Treeview
7.2 schaut genauso aus. Mittlerweile verorte ich das Problem innerhalb der VirtualBox Guest Additions. Die Darstellung ist auch in anderen Programmen teilweise sehr langsam. Wohl auch abhängig davon, ob diese GDI oder DirectDraw verwenden.
|
AW: Grafikperformance von Virtual Treeview
Hallo,
nun das lässt sich doch Evaluieren (schönes Wort ;) ), wenn das Performance unter Windows nativ getestet wird. Hier noch mal der Link mit den VirtualBox-Einstellungen: ![]() Vielleicht muss da noch was gesetzt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz