AGB  ·  Datenschutz  ·  Impressum  







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

TVirtualTreeView gibt nicht alles frei

Ein Thema von hitzi · begonnen am 3. Dez 2004 · letzter Beitrag vom 10. Jul 2007
Antwort Antwort
drchaos

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

Re: TVirtualTreeView gibt nicht alles frei

  Alt 10. Jul 2007, 16: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
Antwort Antwort


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 05:50 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