![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему такое случается? [D5, Win2k]
Blacker77 © (2003-01-27 17:19:00)Hi All.
Помогите разобраться PLZ.
Делаю рекурсивную функцию с поиском имен каталогов.
Сделал. Запускаю, выполняю и после выполнения программа вместо 1Mb занимает в память 200Mb инфу о каталогах заношу в
array of string; и элементов там отоло 2 тыс. всего!!!
Вот код функции:
Dirs:array of string;
......
Procedure Scan(Index:longint);
var
SR:TSearchRec;
a:longint;
begin
if FindFirst(Dirs[Index]+"*.*",faDirectory,SR)=0 then
repeat
if (DirectoryExists(Dirs[Index]+SR.Name)) and
(SR.Name<>".") and (SR.Name<>"..") then
begin
a:=Length(Dirs);
SetLength(Dirs,a+1);
Dirs[a]:=Dirs[Index]+SR.Name;
if Dirs[a][Length(Dirs[a])<>"\" then
Dirs[a]:=Dirs[a]+"\";
Scan(a);
end;
until FindNext(SR);
end;
Запускаем:
Dirs[0]:="c:\";
Scan(0);
И смотрим размер программы в диспетчере задач Windows.
Делаем квадратные глаза!
Ну почему?
Anatoly Podgoretsky (2003-01-28 13:29:00) [1]Что бы у тебя не было там, но без FindClose полный кырдык
Blacker77 (2003-01-28 13:28:00) [2]To icWasya: вот прям большими буквами ПАСИБО!!!! Теперь все ok
Blacker77 (2003-01-28 13:21:00) [3]To MBo: Пробовал таж фигня! А вот насчет FindClose ща попробую...
icWasya (2003-01-27 17:23:00) [4]
until FindNext(SR);
FindClose(sr);//!!!!!!!!!!
end;
MBo (2003-01-27 17:23:00) [5]Используй TStringList
у тебя происходит постоянная реаллокация памяти под дин. массив, остаются дырки