Einzelnen Beitrag anzeigen

Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#1

Speichern eines großen Arrays

  Alt 31. Mär 2010, 16:21
Ich versuche derzeit meinen Vokabeltrainer etwas zu optimieren. Dabei habe ich es besonders auf die Speicherung der Vokabeln abgesehen:
Delphi-Quellcode:
  TVocabulary = record
    Language1: String[100];
    Language2: String[100];
    Note: String[100];
    AddedOn: TDateTime;
    LastTraining: TDateTime;
    Chance: Single;
    Mistakes: Integer;
    Trials: Integer;
    Box: Integer;
  end;
Während das Programm läuft liegen alle Vokabeln in einem array of TVocabulary vor und werden beim schließen in einer File of TVocabulary gespeichert.
Das hat aus meiner Sicht folgende Vorteile:
1. Mit dem Array lässt es sich sehr gut arbeiten (man brauch kein seak, read oder write)
2. Durch das Anhängen eines zusätzlichen Datensatzes lassen sich leicht ein paar Einstellungen zur Vokabelliste speichern, sodass jede Datei eine eigenständige Vokabelliste darstellt, die man problemlos verschieben oder an Freunde schicken kann (mit den Einstellungen).
3. Da alle Daten zur Laufzeit im Arbeitsspeicher liegen, gehen auch aufwändigere Aktionen (statistische Daten) sehr schnell.
4. Keine Datenbankinstallation oder gar Datenbanktreiber notwendig. Die File of TVocabulary wird von einer selbst geschriebenen Klasse (hab sie auch mal angehangen) verwaltet

aber auch ein paar Nachteile:
1. Bei vielen Vokabeln (~100k) dauert das Laden in den Array und das Speichern in die Datei etwas länger (von der Darstellung in einer Listbox ganz zu schweigen^^)
2. Die File of TVocabulary benötigt eine Begrenzung (Finalization) für die Strings. Dies bedeutet das man sich endscheiden muss zwischen einer möglichst unbegrenzten Stringlänge (die 100 Zeichen ist schon unterste Schmerzgrenze) und keiner überflüssigen Arbeitsspeicherverschwendung, denn egal wie lang die Vokabel dann wirklich ist, wird Platz für 300 Zeichen reserviert.


Was ich nun suche ist eigentlich einen Weg, der die gleichen Vorteile bietet, aber auch die Nachteile deutlich minimiert. Und bevor ich wild drauf los programmiere, wollt ich einfach mal euren Rat hören bzw. eure Ideen hören.
Meine Idee wäre erstmal:
a) Die Klasse zur Verwaltung so anpassen, dass sie nur die aktuell ausgewählte Vokabel lädt und in der angesprochenden Listbox immer nur so 1000 Vokabeln dargestellt werden (muss man sich dann etwas Mühe mit dem Seak bei der File of TVocabulary damit man nicht verrutscht). Damit auch die Statistiken schnell dargestellt werden, könnte man dafür dann ein paar Variablen mitführen (z.B. immer den Index der Vokabel mit den meisten Fehlern in einem Integer speichern). Wär halt etwas Aufwand...
b) Datenbank, aber davon hab ich eigentlich keine Ahnung und ich möchte dem Benutzer keine Datenbankinstallation zumuten.

So, jetzt seid ihr dran
Angehängte Dateien
Dateityp: pas mvocabularybook_177.pas (40,1 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat