Замедление работы при использовании TList

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение ushakov » 21.08.2005 16:33:02

Написал набор консольных утилит (три), предназначеных для получения списка характеристик файлов (Имя, размер, атрибуты, дата), сравнения списков и просмотра списков в человеческом виде. Характеристика каждого файла - структура следующего вида:
Код: Выделить всё
 // Тип - общая характеристика файла
 TFileInfo = record
   FileName: String;
   Attr: Longint;
   Size: Longint;
   DateTime: TDateTime;
 end;


Память при добавлении характеристики в список выделяется при помощи GetMem, а указатели хранятся в TList. Если список составляется для относительно небольших директорий (до 20000 файлов/директорий) все работает относительно быстро. Когда количество переваливает за 100000 - это просто несколько десятков файлов/директорий в секунду!

Как бороться с подобным поведением класса TList?

PS: Исходники тайной не являются, кому необходимо - отправлю по почте. Предназначены программы для мониторинга файловой системы. Компилируются как под win32 (исключая 9x/Me) так и под Linux, но я их пытаюсь использовать исключительно под Linux.

Все это тестируется на P4 2.8 GHz, 1GB RAM, 160 GB SATA HDD :)
ushakov
новенький
 
Сообщения: 51
Зарегистрирован: 18.05.2005 11:15:48
Откуда: Украина, Киев

Сообщение Сергей Смирнов » 21.08.2005 16:54:58

У меня вот такой код выполняется менее секунды:

Код: Выделить всё
L := TList.Create;
for i:=0 to 1000000 do
begin
   PFI := GetMem(SizeOf(TFileInfo));
   L.Add(PFI);
end;


PIII-800 512Mb WinXP

Ищи проблему в другом месте.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение ushakov » 21.08.2005 17:19:57

Всем спасибо, вопрос снимается. По невнимательности поставил сортировку списка в конце процедуры, забыв что она вызывается рекурсивно :)
ushakov
новенький
 
Сообщения: 51
Зарегистрирован: 18.05.2005 11:15:48
Откуда: Украина, Киев


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14

Рейтинг@Mail.ru