Hallo Zusammen,
ich weiß, ähnliche Themen gab es hier in letzter Zeit öfters aber ich mache ein neues auf, weil ich mein Problem in den anderen nicht direkt wiederfinden konnte .
Ich lese große CSV-Dateien ein (500.000 Datensätze). Jeder Datensatz ist ein Element einer
. Diese splitte ich dann in eine
, d.h. ich hätte bereits rund 1Mio Objekte. Warum ich das so machen muss, hat den Hintergrund, weil die komplette Datei zu jedem Datensatz, der verarbeitet wird, zugänglich sein muss. Es kann sein, dass bei Datensatz 400000 auf den ersten zugegriffen wird. Ausserdem erfolgt bei jedem Datensatz eine Prüfung. Liefert diese
, wird der aktuelle Datensatz einer Errorliste hinzugefügt. D.h. ich brauch im Grunde beide Listen zu jeder Zeit.
Dazu kommt am Ende natürlich noch der Output.
Einzige Option, die ich hier sehe ist, die
mit einem Iterator zu durchlaufen und wenn ein Datensatz erfolgreich bearbeitet wurde, diesen zu entfernen. Dadruch würde die HeapSize schonmal im Laufe des Prozess wenigstens stagnieren (1 Datensatz Input = 1 Datensatz Output bzw. 1 Errordatensatz) - in manchen Fällen würde die HeapSize auch abnehmen.
Nun zur Frage: Was bleibt mir anderes übrig, als die HeapSize massiv hochzusetzen?
Ändere ich den Ablauf (direkter Split beim Lesen) verzichte ich auf einige Funktionen des Programms, auf die leider kein Verzicht ist. Die Möglichkeit beim Lesen direkt zu Splitten und die Bedingung zu prüfen (habe mir das schon in Form eines Interfaces
mit
überlegt) funktioniert leider auch nicht ganz, weil zum Zeitpunkt der Prüfung die komplette
zur Verfügung stehen muss.
Danke schonmal
Grüße
Andi
ich weiß, ähnliche Themen gab es hier in letzter Zeit öfters aber ich mache ein neues auf, weil ich mein Problem in den anderen nicht direkt wiederfinden konnte .
Ich lese große CSV-Dateien ein (500.000 Datensätze). Jeder Datensatz ist ein Element einer
Code:
List<String>
Code:
List<String[]>
Code:
false
Dazu kommt am Ende natürlich noch der Output.
Einzige Option, die ich hier sehe ist, die
Code:
List<String>
Nun zur Frage: Was bleibt mir anderes übrig, als die HeapSize massiv hochzusetzen?
Ändere ich den Ablauf (direkter Split beim Lesen) verzichte ich auf einige Funktionen des Programms, auf die leider kein Verzicht ist. Die Möglichkeit beim Lesen direkt zu Splitten und die Bedingung zu prüfen (habe mir das schon in Form eines Interfaces
Code:
EntityFilter
Code:
accept(String[] entity)
Code:
List<String[]>
Danke schonmal
Grüße
Andi