ich versuche mit einer StringList eine relativ große Text-Datei (1*265*819*892 Bytes) zu laden
Das sind ja auch nur gut 180 MB, sollte also kein Problem sein.
Du solltest also wirklich mal den Debugger einsetzen.
die TStringList hat eine Grenze von theoretisch 2 Mrd. Einträgen.
Praktisch ist aber schon viel früher Schluss.
Auch damals unter Delphi-64Bit ging es bei mir nicht weiter.
Das LoadFromString/LoadFromStream ist in der Regel für die Begrenzung zuständig.
Delphi-Quellcode:
procedure TStrings.LoadFromStream(Stream: TStream; Encoding: TEncoding);
var
Size: Integer;
Buffer: TBytes;
begin
BeginUpdate;
try
Size := Stream.Size - Stream.Position;
SetLength(Buffer, Size);
Stream.Read(Buffer, 0, Size);
Size := TEncoding.GetBufferEncoding(Buffer, Encoding, FDefaultEncoding);
SetEncoding(Encoding); // Keep Encoding in case the stream is saved
SetTextStr(Encoding.GetString(Buffer, Size, Length(Buffer) - Size));
finally
EndUpdate;
end;
end;
Obwohl
Stream.Size und
Stream.Position als Int64 deklariert sind, wird für die Differenz nur ein Integer bereitgestellt. Das nachfolgende
SetLength muss dann noch einen zusammenhängenden Speicherbereich in der gewünschten Größe finden, was unter 32-Bit schnell mal zum problem werden kann. Aber auch dieses
SetLength beschränkt die Puffergröße auf 2GB, weil
NewLength auch nur ein Integer ist.
Allerdings sehe ich in diesem konkreten Fall erstmal keine dieser Grenzen überschritten.