Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.032 c
3-1090227822
snake1977
2004-07-19 13:03
2004.08.15
ORACLE и генератор


3-1090487874
Dmitriy O.
2004-07-22 13:17
2004.08.15
Как узнать прошла транзакция ?


1-1091491749
Almaz
2004-08-03 04:09
2004.08.15
Выбор Published свойств, определенных в конкретном классе


3-1090239059
AlexanderSK
2004-07-19 16:10
2004.08.15
dbExpress и InterBase


1-1091504016
Eagle8
2004-08-03 07:33
2004.08.15
Icon





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский