Конференция "Начинающим" » куда уходит память? [D7, WinXP]
 
  • tippa (26.07.14 17:56) [0]
    program Project1;

    {$APPTYPE CONSOLE}

    uses
     SysUtils,
     classes,
     windows;

    var list:TStringList;
       i:integer;

    procedure pars(str:string);
    var l:TstringList;
       buf:string;
    begin
    l:=TStringList.Create;
    l.LoadFromFile(str);
    buf:=l.Text;
    repeat
    if pos('<td> <i class=\"muted\" style=\"font-size:small\">',buf)=0 then break;
    delete(buf,1,pos('<td> <i class=\"muted\" style=\"font-size:small\">',buf)+45);
    delete(buf,1,pos('href=\"/node/',buf)+11);
    list.Add(copy(buf,1,pos('\"',buf)-1));
    until false;
    l.Free;
    end;

    procedure obxod1(path:string);
    var
    FD : TWin32FindData;
    FH : THandle;
    begin
    FH := FindFirstFile(PChar(path+'*.*'), FD);
    repeat
     if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName<>string('.')) and (FD.cFileName<>string('..')) then
     begin
     if (FD.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
                                                     begin
                                                     obxod1(path+FD.cFileName+'\');
                                                     end
                                                     else pars(path+FD.cFileName);
                                                     //list.Add(path+FD.cFileName);
     end;
    until FindNextFile(FH, FD) = false;
    end;

    begin
    list:=TStringList.Create;
    obxod1('folder1\');
    list.SaveToFile('result.txt');
    list.Free;
    end.


    перебираю все файлы в папке, каждый файл гружу в стринглист [l], выдираю из него нужное и это нужное записываю в результирующий стринглист [list]. Но уже при 100к строк программе не хватает памяти, причем одна строка в стрингисте [list] - это максимум 20 символов. Подскажите где наврал?
  • RWolf © (26.07.14 19:11) [1]
    если list нужен только для накопления строк, почему бы сразу не писать их в файл?
    var f:TextFile;
    ...
    writeln(f, copy(buf,1,pos('\"',buf)-1));

  • tippa (26.07.14 19:21) [2]
    да, так будет лучше, спасибо
  • MBo © (27.07.14 14:24) [3]
    на будущее - успешный вызов FindFirstFile должен сопровождаться FindClose
  • Dennis I. Komarov © (06.08.14 12:31) [4]
    и в try/finally оберни
 
Конференция "Начинающим" » куда уходит память? [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0.002]