Einzelnen Beitrag anzeigen

generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#58

Re: Datenbank in VirtualTreeView anzeigen und auswerten

  Alt 10. Mär 2009, 21:00
Sieht ganz gut aus, aber einen müssen wir abziehen, hätten die bei Rosental gesagt.

Du hast ein
VST.NodeDataSize := SizeOf(TOMB256PLUS); doppelt.

Eigentlich reicht der eine im CreateForm.

Wenn du einen Datensatz hinzufügst, würde ich die Daten direkt in das VST Objekt schreiben und dem VST hinzufügen.
Erst in die DB schreiben und dann wieder alle DS laden, um dann zum letzten zu springen um diesen dann in das Objekt zu kopieren
erscheint mir etwas umständlich.


Kleine Anmerkung noch zu der Recordlösung.
Dort nutzt du die Datentype String und Widestring. Dieses sind Zeigertypen.

Records sind einfach ausdrückt zusammenhängende Speicherblöcke optimal ohne Zeiger drin.
So kann dieser Speicherblock direkt z.B. von/auf Festplatte geschrieben/geladen werden ohne die Daten im Speicher zu suchen zu müssen.

Der VST z.B. nutzt die Records um Geschwindigkeit gut zu machen.
Bei 100 Datensätzen wird nur 1 mal Speicher belegt. Dadurch geht das sehr schnell.
Nutzt du nun Huge-/Wide-Strings dann wird im Record nur ein Zeiger zu dem String abgelegt.

Der kann zwar ganz normal genutzt werden, wird aber vom VST nicht mehr freigegeben und du erhälst Speicherlöcher.
Das kannst du mit dem FastMM kontrollieren. Ein Beispiel befindet sich auch im DP Stammtischvideo #2.

Es gibt 2,5 Möglichkeiten da drum rum zu kommen.
1) Shortstrings verwenden z.B. String[255] wobei die Stringlänge =<255 sein muss
2) du gibts den Huge-/Wide-String frei bei dem onFreeNode Ereignis
2,5) du schaltest die Hugestrings im Compiler aus

Die Objektmethode ist dort anders.
Im onFreeNode wird das komplett Objekt freigegeben also ist das gut.
Nachteil bei 100 Datensätzen fordert der VST 100 mal Speicher für den Knoten im addNode an. Dauert dadurch etwas länger.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat