![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
куда уходит память? [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));