Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

Почему такое случается?   Найти похожие ветки 

 
Blacker77 ©   (2003-01-27 17:19) [0]

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.
Делаем квадратные глаза!
Ну почему?


 
icWasya ©   (2003-01-27 17:23) [1]

until FindNext(SR);
FindClose(sr);//!!!!!!!!!!
end;





 
MBo ©   (2003-01-27 17:23) [2]

Используй TStringList
у тебя происходит постоянная реаллокация памяти под дин. массив, остаются дырки


 
Blacker77 ©   (2003-01-28 13:21) [3]

To MBo: Пробовал таж фигня! А вот насчет FindClose ща попробую...


 
Blacker77 ©   (2003-01-28 13:28) [4]

To icWasya: вот прям большими буквами ПАСИБО!!!! Теперь все ok


 
Anatoly Podgoretsky ©   (2003-01-28 13:29) [5]

Что бы у тебя не было там, но без FindClose полный кырдык



Страницы: 1 вся ветка

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
3-15458
AndreyRr
2003-01-20 13:01
2003.02.06
Excel


14-15921
mate
2003-01-18 09:58
2003.02.06
Установка Delphi


14-15917
Evgen_Iam
2003-01-21 10:51
2003.02.06
Как правильно сохранить копию проекта


14-15862
Dumm
2003-01-19 16:23
2003.02.06
Outlook Express


1-15539
Dmitry Filippov
2003-01-28 13:34
2003.02.06
Компонент имеет свойство TStrings в DFM