Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: 2 Gigabyte grosse Datei blockweise durchsuchen

  Alt 28. Dez 2006, 15:06
Hi,
dein Ansatz auf TFileStream zu setzen ist imho gar nicht schlecht, kannst du sehr einfach verwenden und spricht nichts ernsthaft gegen.

Was die Positionen und das dyn. Speichern angeht, hast du gleich mehrere Möglichkeiten. Die erste (von der ich dir gleich abraten möchte) besteht darin, dass du ein dyn. Array verwendest. Hier kannst du mittels setLength die Länge dyn. anpassen, was intern aber zum neu allozieren von Speicher und umkopieren der alten Daten führt (also ein eher großer Overhead). Hier kannst du natürlich einfach mehr Speicher reservieren als du benötigst (der Overhead pro Element sinkt entsprechend ab), musst dann allerdings natürlich auch verwalten wieviele Elemente tatsächlich benutzt werden.
Da gibt es eine Klasse TList, die nimmt dir genau das ab. Intern wird zwar ein Array verwendet, aber diese Klasse kümmert sich bereits um die Verwaltung der Größe (du musst nicht mehr machen als Elemente mit Add einfügen). TList speichert dabei einfach Pointer, hier kannst du also die Adresse beliebiger Daten ablegen (oder gleich die 32 Bit als Position missbrauchen).
Verwendest du wirklich Objekte (also Instanzen von Klassen), so kannst du auf TObjectList zurückgreifen. Im Prinzip funktioniert diese Liste wie TList, du kannst in ihr aber nur Objekte (Referenzen auf diese) speichern. Der Vorteil dabei liegt dann darin, dass jedes Objekt einen Destruktor haben muss, der sich um die Freigabe des Speichers kümmert. Die TObjectList kann somit auch aut. für die Freigabe aller gespeicherten Elemente sorgen, bei der TList musst du dich selbst darum kümmern.

Gruß Der Unwissende
  Mit Zitat antworten Zitat