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

Вниз

FindFirst/FindNext и скорость   Найти похожие ветки 

 
TUser ©   (2004-07-30 12:47) [0]

Почему сабж так тормозит. Загружаю в ListView имена файло, их примерно 2000, висит минут 5. Тормозит точно не ListView, т.к. если те же файлы выделить в OpenDialog и пройтись по всем OpenDialog.Files - то все практически мгновенно. При показе OpenDialog"а тоже никаких особых тормозов нет, т.е. может он каким-то образом быстро получить список файлов. Как сделать быстрый перебор всех файлов?


 
panov ©   (2004-07-30 12:53) [1]

Зависит от внешних условий(количество файлов в каталоге, количество отфильтрованных файлов).

В OpenDialog ты не ведешь сканирование списка файлов, а просто выделяешь, поэтому в этом случае другая ситуация.

хотя у меня никогда особо не тормозил FindFirst...


 
Anatoly Podgoretsky ©   (2004-07-30 12:53) [2]

Ошибка в 17 строке


 
clickmaker ©   (2004-07-30 12:54) [3]


> TUser ©   (30.07.04 12:47)

Код перебора?


 
GuAV ©   (2004-07-30 12:55) [4]

Вряд ли сабж тормозит. Он не сильно завернут вокруг соотв функций ОС. Верноятно, ты просто забыл ListView.Items.BeginUpadte/ListView.Items.EndUpadte.
Ещё может быть что то, что пробуется сначала дольше, а потом уже работает кэш.


 
TUser ©   (2004-07-30 13:03) [5]

Тормозит не ListView, т.к. повторяю - можно туда же добавить все эти итемы и гораздо быстрее. А OpenDialog получает просто список имен файлов в данном каталоге, в то время как сабж получает еще и аттрибуты, наверное поэтому все там и медленнее.

Код самый обычный, такой же как в хелпе
beginupdate;
if FindFirst(Path+"*.*",faAnyFile,sr) = 0 then
repeat
  if (sr.attr and faAnyfile) = sr.Attr then begin
     {...}
     end;
until FindNext(sr) <> 0;
endupdate;


 
BillyJeans   (2004-07-30 13:11) [6]

тормоз в 5й строке!


 
GuAV ©   (2004-07-30 13:12) [7]


> А OpenDialog получает просто список имен файлов в данном
> каталоге, в то время как сабж получает еще и аттрибуты,
> наверное поэтому все там и медленнее.

OpenDialog тоже их получает. иначе как он сортирует и определяет ReadOnly, выводит теблицу, etc.
ну попробуй FindFirstFile/FindNextFile, убедись, что сабж не тормозит.


 
MegaVolt   (2004-07-30 13:16) [8]

Заремь вывод в ListView и померяй скорость.


 
Anatoly Podgoretsky ©   (2004-07-30 13:23) [9]

MegaVolt   (30.07.04 13:16) [8]
Зачем? Надо просто строго измерить приведеный код, ничего в него не добавляя. Выдать наконец более подробную информацию, что за папка, сколько в ней файлов, где расположена, может в другом домене и низкоскоростной канал, может антивирус проверяет все сканируемые файлы и т.д. Подходящей для измерения является папка System, там несколько тысяч файлов.


 
TUser ©   (2004-07-30 13:27) [10]

Папка локальная, антивирус не сканирует. Код выполняется 5 минут. Можно вместо него написать
beginupdate;
if OpenDialog1.execute then
  for i:=0 to OpenDialog1.Files.Count-1 do
     {...}
endupdate;
где {...} точно такой же. Затем открываем OD, он через пару сек. выводит список файлов, все выделяем - код отрабатывает секунды за 3!


 
Anatoly Podgoretsky ©   (2004-07-30 13:38) [11]

Ужас, у меня приведеный в [5] код выполнился меньше чем за секунду.


 
GrayFace   (2004-07-30 14:41) [12]

Anatoly Podgoretsky ©   (30.07.04 13:23) [9]
>Подходящей для измерения является папка System, там несколько тысяч файлов.
Только 1500. В Delphi\Lib больше. Хотя это сильно зависит от числа компонент.


 
GuAV ©   (2004-07-30 14:48) [13]

Может OpenDialog их выводит отсортированными, и на сортировку время не тратится; а если через FindFirst, то родная сортировка ListView или твоя сортировка тормозит?


 
GrayFace   (2004-07-30 14:53) [14]

16000 файлов грузятся за 1 секунду на слабом (Celeron 433, ж/д 10 GB) компе если {...}=Add(sr.Name);



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

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

Наверх




Память: 0.49 MB
Время: 0.022 c
1-1091166407
П7
2004-07-30 09:46
2004.08.15
Элементы TTreeView и Drag n Drop


3-1090408271
Иванов Сергей
2004-07-21 15:11
2004.08.15
Выборка из большой базы


14-1090879877
maxx
2004-07-27 02:11
2004.08.15
пару лёгких вопросов. HELP


1-1091433514
Chereepovets
2004-08-02 11:58
2004.08.15
Про планеровщик


1-1091527866
GanibalLector
2004-08-03 14:11
2004.08.15
Word (увеличение шрифта)