Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

куда уходит память? [D7, WinXP]


tippa ©   (2014-07-26 17:56:00) 

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 символов. Подскажите где наврал?


Dennis I. Komarov   (2014-08-06 12:31:00) [1]

и в try/finally оберни


MBo   (2014-07-27 14:24:00) [2]

на будущее - успешный вызов FindFirstFile должен сопровождаться FindClose


tippa   (2014-07-26 19:21:00) [3]

да, так будет лучше, спасибо


RWolf   (2014-07-26 19:11:00) [4]

если list нужен только для накопления строк, почему бы сразу не писать их в файл?
var f:TextFile;
...
writeln(f, copy(buf,1,pos('"',buf)-1));


Наверх

Титульная страница Поиск, карта сайта Написать письмо