Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#15

AW: Textdatei laden - Integerüberlauf

  Alt 15. Jul 2020, 13:35
Die Datei wird ja quasi mehrfach in den Speicher geladen
* erstmal in einem Puffer
* dann nochmal als Unicode umkopiert
* und zum Schluss nochmal jede Zeile als einzelner String

Die ersten Beiden Zeile sind ein Block und müssen demach auch in einen "goßen" freien Speicherblock
und erfahrungsgemäß wird es ab 700 MB oft nahezu unmöglich im fragmentieren Speicher noch was zu finden.

Lösung: mit 64 Bit kompilieren

Oder Zeilenweise einlesen, entweder über eine passende Streamingfunktion oder mit den alten AssignFile+ReadLn,
aber selbst das wird nicht gehen, denn die Strings sind zwar kurze Zeilen-Stückchen,
die sich im Speicher gut verteilen, aber Dank Unicode sind es dann über 2 GB,
womit du dann die 4GB-Option aktivieren {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} ,
so dass du dann bis fast 4 GB (64 Bit Windows), bzw. 3 GB (32 Bit Windows) zur Verfügung hasthättest. (abzüglich geladener EXE, DLLs usw.)




Das "richtige" Verfahren ist aber nicht ALLEs zu laden, sondern solche großen Dateien nur stückchenweise in mehreren Blöcke á einigen KB/MB aufgeteilt zu laden und nacheinander zu behandeln.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Jul 2020 um 13:37 Uhr)
  Mit Zitat antworten Zitat