![]() |
AW: Textdatei laden - Integerüberlauf
Zitat:
Grüße Dalai |
AW: Textdatei laden - Integerüberlauf
Ich vermute, dass 1*265*819*892 Bytes eigentlich 1.265.819.892 Bytes heißen soll und der * nur der Verdeutlichung dienen sollte.
|
AW: Textdatei laden - Integerüberlauf
Ich habe es ausprobiert,
wenn die Datei > wie MaxInteger/2 ist (1073741824) dann tritt bei StringList.LoadfromFile der Fehler Integerüberlauf auf. Ich vermute mal, dass Delphi für jedes Character 2 Bytes benötig. |
AW: Textdatei laden - Integerüberlauf
Zitat:
![]() Sherlock |
AW: Textdatei laden - Integerüberlauf
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
Delphi-Quellcode:
,
{$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. |
AW: Textdatei laden - Integerüberlauf
Zitat:
Zitat:
|
AW: Textdatei laden - Integerüberlauf
Zitat:
Gruß, Andreas |
AW: Textdatei laden - Integerüberlauf
Hallo,
ich verwende 64-Bit-Windows und die Delphi-Zielplattform 64-Bit. |
AW: Textdatei laden - Integerüberlauf
Wieviele Zeilen hatt denn die Datei?
[EDIT] Obwohl, selbst mit 32 Bit sind ja theoretisch schon knapp 'ne milliarde Zeilen möglich und selbst wenn im 64 Bit noch ein Zähler auf 32 Bit stehen würde, wären es immernoch mindestens 500 Mio. |
AW: Textdatei laden - Integerüberlauf
Mit LoadFromFile ist die Größe der Datei intern auf 2GB beschränkt, unabhängig von den Zeilen und von 32/64-Bit.
Ein alternative Ansatz dazu wäre über einen StreamReader die Datei zeilenweise zu lesen und jede Zeile mit Add anzufügen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz