Guten Tag,
Für meine Belegarbeit arbeite ich momentan an einer Anwendung, die Dateien Byte-weise einliest und ausgibt.
Letztendlich handelt es sich um einen erweiterten File-Viewer mit Bearbeitungs-, und später auch Suchoptionen.
Das Problem ist, dass ich aus Ressourcengründen nicht in der Lage bin, Datein komplett einzulesen und diese als Byte-Array zu speichern. Hantiert man mit sehr großen Datenmengen, läuft der Arbeitsspeicher voll.
Um dieses Problem zu lösen, lese ich die Daten immer nur Abschnittsweise ein - in diesem Fall 120 Byte pro Aktion.
Wenn auch die Performance um ein vielfaches gesteigert wird, stehe ich nun vor einem schwierigen Problem:
Wie kann ich geplante Änderungen, wie zum Beispiel das Hinzufügen oder Löschen von Daten umsetzen?
Folgende mögliche Varianten habe ich im Kopf:
- eine vollständige Kopie der Datei (Kopie kann sehr viel Speicher fressen, dazu Kopieraufwand, allerdings am leichtesten zu bearbeiten)
- eine "Schatten"-Datei, in welche nur die Daten bis zum geänderten Index kopiert und geändert werden - bei Änderung vorne in der Originaldatei sehr klein, bei Änderung hinten fast so groß wie das Original (potenziell kleiner, potenziell geringerer Kopieraufwand, etwas schwieriger damit zu arbeiten)
- eine Art Register, das alle Änderungen vermerkt - diese Änderungen werden bei jedem Einlesen der Datenblöcke aus der Original-Datei beachtet, also als eine Art Filter, wird beim Speichern in die Original-Datei ebenfalls beachtet (benötigt wenig Speicher, schwierig zu implementieren, *1)
*1 - kann bei vielen Änderungen die Einlesezeit beeinträchtigen, allerdings bietet sich meine Anwendung nicht dafür an, sehr viele Änderungen vorzunehmen
Welche Idee würdet ihr nutzen, oder kennt ihr vielleicht sogar eine noch bessere Lösung?
Ich bedanke mich für jede Hilfe,
Jacob
Für meine Belegarbeit arbeite ich momentan an einer Anwendung, die Dateien Byte-weise einliest und ausgibt.
Letztendlich handelt es sich um einen erweiterten File-Viewer mit Bearbeitungs-, und später auch Suchoptionen.

Das Problem ist, dass ich aus Ressourcengründen nicht in der Lage bin, Datein komplett einzulesen und diese als Byte-Array zu speichern. Hantiert man mit sehr großen Datenmengen, läuft der Arbeitsspeicher voll.
Um dieses Problem zu lösen, lese ich die Daten immer nur Abschnittsweise ein - in diesem Fall 120 Byte pro Aktion.
Wenn auch die Performance um ein vielfaches gesteigert wird, stehe ich nun vor einem schwierigen Problem:
Wie kann ich geplante Änderungen, wie zum Beispiel das Hinzufügen oder Löschen von Daten umsetzen?
Folgende mögliche Varianten habe ich im Kopf:
- eine vollständige Kopie der Datei (Kopie kann sehr viel Speicher fressen, dazu Kopieraufwand, allerdings am leichtesten zu bearbeiten)
- eine "Schatten"-Datei, in welche nur die Daten bis zum geänderten Index kopiert und geändert werden - bei Änderung vorne in der Originaldatei sehr klein, bei Änderung hinten fast so groß wie das Original (potenziell kleiner, potenziell geringerer Kopieraufwand, etwas schwieriger damit zu arbeiten)
- eine Art Register, das alle Änderungen vermerkt - diese Änderungen werden bei jedem Einlesen der Datenblöcke aus der Original-Datei beachtet, also als eine Art Filter, wird beim Speichern in die Original-Datei ebenfalls beachtet (benötigt wenig Speicher, schwierig zu implementieren, *1)
*1 - kann bei vielen Änderungen die Einlesezeit beeinträchtigen, allerdings bietet sich meine Anwendung nicht dafür an, sehr viele Änderungen vorzunehmen
Welche Idee würdet ihr nutzen, oder kennt ihr vielleicht sogar eine noch bessere Lösung?
Ich bedanke mich für jede Hilfe,
Jacob