OutOfMemoryError with TStringList
Bonjour,
j'essaye de remplir une stringlist avec un streamreader.
Mais j'ai un OutOfMemoryError quand j'ajoute les lignes.
J'ai déja chercher beaucoup sur le web mais n'ai pas trouvé de solution.
J'ai aussi augmenté la capacité de la stringlist avec capacity mais cela n'a rien changé.
Merci pour votre aide.
Voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| list := TStringList.create;
//list.Capacity := 100000000; ne marche pas
Reader := TStreamReader.Create(filename, true);
try
list.BeginUpdate;
try
list.Clear;
while not Reader.EndOfStream do
list.Add(Reader.ReadLine); > OutOfMemoryError
finally
list.EndUpdate;
end;
finally
Reader.Free;
end; |
J'ai oublié de le dire, mon fichier est un fichier XML qui fait 250 MO.
Un petit exemple en XE7 comme base de travail
Voilà un petit programme qui marche sur ma machine MS-Windows 8.1 avec un fichier de 255 Mo qui peut te servir comme base de travail.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
procedure TForm1.Button1Click(Sender: TObject);
const
K1 = $3FFFFF ;
var
ms1: TMemoryStream ;
sl1 : TStringList ;
st1 : AnsiString ;
pb1 : ^Byte ;
i1 : integer ;
begin
st1 := 'ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFABCDEFAB'#13#10 ;
pb1 := @st1[1] ;
ms1 := TMemoryStream.create;
ms1.SetSize(K1*$40);
for i1 := 1 to K1 do
ms1.Write(pb1^,64);
ms1.SaveToFile('X.TXT');
ms1.Free;
application.Terminate ;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
sl1 : TStringList ;
ms1: TMemoryStream ;
begin
ms1 := TMemoryStream.create;
ms1.LoadFromFile('X.TXT');
sl1 := TStringList.create ;
sl1.LoadFromStream(ms1);
sl1.Free;
ms1.Free;
application.Terminate ;
end; |