Einzelnen Beitrag anzeigen

drchaos

Registriert seit: 15. Jun 2007
13 Beiträge
 
#3

Re: TVirtualTreeView gibt nicht alles frei

  Alt 10. Jul 2007, 17:45
Zitat:
Datenrecord:

Delphi-Quellcode:
type
  PTreeData = ^TTreeData;
  TTreeData = record
    FName : String;
    FPrivat : String;
    FMobile : String;
    FWork : String;
    FOther : String;
    FFax : String;
    FEmail : String;
    FHomepage : String;
    FOrganisation : String;
    FPosition : String;
    FStreet : String;
    FZIP : String;
    FCity : String;
    FState : String;
    FCountry : String;
    FNotes : String;
    fLuid : string;
  end;
Eine Frage: Wenn in diesem Datenrecord ausschließlich Felder mit konstanter Größe vorhanden wären, könnte ich doch auf die Freigabe der Knoten im Ereignis OnFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode) verzichten, nicht wahr?

Hintergrund: Bei 50000 und mehr Knoten dauert mir die Freigabe per "Fxyz := ''" oder "Finalize(NodeData^)" zu lange.

Kann ich also das Freigeben auslassen, wenn ich stattdessen die Strings mit fester Länge deklariere, z.B. FName : String[50] ?
(Es wäre auch keine großartige Speicherverschwendung, weil alle Zeichenketten eh ungefähr gleiche Länge haben werden)

edit:
ok, im VirtualTreeView-Doc steht:
Zitat:
TVirtualStringTree.OnFreeNode Event

Triggered when a node is about to be freed. This is the ideal place to free/disconnect your own data you associated with Node. Keep in mind, that data which is stored directly in the node does not need to be free by the application. This is part of the node record and will be freed when the node is freed. You should however finalize the data in such a case if it contains references to external memory objects (e.g. variants, strings, interfaces).
So etwas wie String[50] wird als Konstante ins Record geschrieben, ja? Oder erzeugt Delphi dann trotzdem Pointer, und reserviert Speicher außerhalb der Struktur?

nochmal edit:
Zitat:
Onlinehilfe Delphi5 zum Thema "Statische Arrays"
Ein Array der Form array[0..x] of Char wird als nullbasiertes Zeichen-Array bezeichnet, da sein Index bei 0 beginnt. Nullbasierte Zeichen-Arrays werden zum Speichern von nullterminierten Strings verwendet und sind kompatibel mit PChar-Werten. Informationen hierzu finden Sie unter Nullterminierte Strings.
Ok, Char-Arrays sind erwartungsgemäß statisch... ist denn nun String[50] äquivalent zu array[0..49] of Char?
  Mit Zitat antworten Zitat