ускорение или замена QDir.entryList(), как ускорить QDir.entryList() |
Здравствуйте, гость ( Вход | Регистрация )
ускорение или замена QDir.entryList(), как ускорить QDir.entryList() |
maric2000 |
26.10.2009, 11:00
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 26.10.2009 Пользователь №: 1179 Спасибо сказали: 0 раз(а) Репутация: 0 |
В программе требуется для заполнения таблицы многократно в цикле вызывать QDir.entryList(const QStringList & nameFilters) с разными масками файлов. Это требуется для определения числа файлов по определенной маске. Выполнение всего цикла занимает неоправданно много времени (если закомментировать строку с QDir.entryList() , то цикл проходит мгновенно). Подскажите, как ускорить entryList или если для определения числа файлов по определенной маске пользоваться другим классом ( функцией), то каким?
PS. раньше в в аналогичной программе, под С++Builder, пользовался FindFirst, FindNext все работало очень быстро. |
|
|
Litkevich Yuriy |
26.10.2009, 11:06
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
niXman |
26.10.2009, 11:39
Сообщение
#3
|
Участник Группа: Участник Сообщений: 169 Регистрация: 18.6.2008 Пользователь №: 204 Спасибо сказали: 1 раз(а) Репутация: 0 |
Где-то в блогах Qt, или еще где-то, не помню, писалось про тормозливость QDir.entryList(const QStringList & nameFilters). Насколько я понял(прочтя ту статью), что если нужна интенсивная работа с этим методом, то лучше написать свой метот, используя API системы. Позже, тоже не помню где, вычитал, что исправили этот недочет.
|
|
|
panter_dsd |
26.10.2009, 12:36
Сообщение
#4
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
Попробуй версию 4.6, там должны быть улучшения по этому поводу.
|
|
|
DIMEDROLL |
26.10.2009, 14:13
Сообщение
#5
|
Участник Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: 0 |
многократно в цикле вызывать QDir.entryList(const QStringList & nameFilters) с разными масками файлов. Я бы взял все файлы (без фильтра), а потом этот список бы фильтровал.Я бы тоже так делал. maric2000 entryList медленная, а ты ее еще и в цыкле вызываешь и она стает мегамедленной делай так: вызываешь QDir.entryList() без фильтров 1 раз, получаешь все файлы в QFileInfoList, а потом в цикле по QFileInfoList проверяешь подходит ли он к твоему фильтру(isFile, isHidden), если да то увеличиваешь счетчик |
|
|
panter_dsd |
26.10.2009, 17:44
Сообщение
#6
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
Тогда не entryList, а entryInfoList.
|
|
|
maric2000 |
27.10.2009, 9:35
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 26.10.2009 Пользователь №: 1179 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо всем! Реализовал оба варианта: и через API функции, и через заранее созданный список. Оба работают приемлемо быстро. Скачал Qt4.6 Beta1, установлю, попробую, отпишусь, исправили ли.
Программу интересуют файлы в директории следующего формата: "??????.??"; Исходный вариант ф-ии:
вариант с API:
Вариант с заранее созданным списком: В конструкторе класса или в ф-ии update:
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 15:56 |