0

filelistbox からファイルをロードしています。filelistbox のファイル番号が大きい場合、プログラムは「メモリ不足」と表示します。それを解決する方法は?

前もって感謝します。

【編集済】

public
...
List: Tstringlist;
...


procedure TForm1.FormCreate(Sender: TObject);
begin
  List:=tstringlist.create;
  List.sorted:=true;
end;

procedure TForm1.processfile;
var
  i:integer;
begin
  if filelistbox1.Count =0 then exit;
  for i:=0 to filelistbox1.count-1 do // 10000 files in filelistbox1
  begin
    memo1.clear;
    memo1.lines.loadfromfile(DirectoryListBox1+'\'+
      filelistbox1.Items.Strings[i]);  
    Addinlist;
    List.savetofile(afile);  
  end;
end;

procedure TForm1.Addinlist;

var
  w1: string;
  p1: tperlregex;
begin
  List.clear;
  p1:=tperlregex.Create(nil) ;
  p1.Subject:=memo1.text;
  p1.regex:='\w+';
  while p1.MatchAgain do 
  begin
    w1:=p1.MatchedExpression;
    List.add(w1);
  end;
  freeandnil(p1);
end;


Windows task manager memory displays: (approxomate number)

file number reaches 10, used memory 402M
file number reaches 100, used memory 402M
file number reaches 500, used memory 408M
file number reaches 1000, used memory 412M
file number reaches 1600, used memory 432M
file number reaches 2200, used memory 460M
file number reaches 3000, used memory 500M
file number reaches 5500, used memory 650M // prompts "Out of memory", form1 freez

これは Delphi 7 にあります。私の質問は次のとおりです。

Does List.clear method clean memory? 
Is there number limit to the items in stringlist?
Can you please let me know how to solve it?
4

1 に答える 1

2

List.clear メソッドはメモリを消去しますか?

はい、TStringList.Clearメソッドは文字列によって割り当てられたメモリを解放します

stringlist の項目数に制限はありますか?

いいえ、実質的な制限はありません。

解決方法を教えてください。

いいえ、コードを実行するとは言えないため、

List.clear;
...
...// parse each word in memo1;
List.add(eachwordinmemo1);

漏れるかどうか。

于 2013-02-23T11:27:21.827 に答える