AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit der Sortierung im VST

Offene Frage von "richard_boderich"
Ein Thema von Assertor · begonnen am 20. Mär 2009 · letzter Beitrag vom 1. Apr 2009
 
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Problem mit der Sortierung im VST

  Alt 20. Mär 2009, 11:48
Hi DPler,

ich stehe gerade etwas auf dem Schlauch:

Hintergrundinfo:
Ich zeige über ein VST Felder einer Datenbank an. Nun habe ich mich per Profiler auf die Suche nach Performance Problemen gemacht, nachdem mir auffiel das ab ca. 1,5 bis 2,5 Mio Datensätzen das ganze alle paar Sekunden langsam wird. Langsam bedeutet hier: Aussetzer wenn man z.B. den Scrollbalken schnell bewegt - genau in der Zeit, wo das Tree seine Anzahl prüft und verändert.

Die Ursachen waren schnell ausgemacht: Im OnBeforeItemErase für die Colorierung statt Index den AbsoluteIndex verwendet (kniffliger Performance-Killer) und toAutoSort war true. Die dahinterliegende Datenbank erhält alle paar Sekunden neue Einträge, die auch angezeigt werden sollen. Bisher wird in einem Timer geprüft, ob die VST.RootNodeCount <> DB.RecordCount ist und ggf. der RootNodeCount erhöht. Ein Trigger von Seiten der Datenbank (Push) ist leider nicht möglich, da die Einträge auch extern erfasst werden und es nur eine embedded DB (SQLite3) genutzt wird.

Alles technisch kein Problem - und rasend schnell auch bei mehr als 2.5 Mio Einträge.

Frage:
Wie kann ich eine DB-gerechte Sortierung umsetzen, die kein Performance-Killer ist?

Für die Sortierung wird nur das Feld bzw. die Spalte Index zugelassen, da hier auch der PK liegt und das OnCompare schnell geht. Wenn jetzt aber per RootNodeCount oder AddChild() neue Einträge dazukommen wird mit/ohne .BeginUpdate/.EndUpdate die ganze Tree neusortiert.

Wenn ich die Daten z.B. per
Delphi-Quellcode:
vstMainGrid.Sort(vstMainGrid.AddChild(vstMainGrid.RootNode),
  vstMainGrid.Header.SortColumn, vstMainGrid.Header.SortDirection, True);
anfüge, werden diese trotzdem an der falschen Position eingefügt (z.B. großer Index > kleiner Index, neue große Index dann "dahinter").

Ich weiß, viele Lösungen verbieten bei dynamischen Trees und DB-konnektierung von sich aus die Sortierung (devexpress u.a.). Trotzdem finde ich eine Basissortierung (1>n, n>1) schöner.

Ideen?

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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 by Thomas Breitkreuz