Форум: "Основная";
Текущий архив: 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.038 c