![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
повысить скорость поиска файлов [D7, XP]
rar © (2006-05-20 20:38:00)У меня такой вопрос. как можно повысить скорость поиска файлов на диске.
Процедура поиска использует рекурсию. Поиск производится по нескольким расширениям.
Список расширений находится в checkListBox наличие расширения в файле проверяю с помощью Matchesmask.
алгоритм поиска следующий.
все выбранные расширения из Checklistbox помещаю в Stringlist.
затем при поиске проверяю каждый файл на наличие в нем расширения из stringlist
и т.д. может есть что-то более быстрое.
Мефисто (2006-05-21 09:32:00) [1]Перед добавлением инфы
ListView1.Items.BeginUpdate;
По завершении ввода всей инфы
ListView1.Items.EndUpdate
rar (2006-05-21 08:18:00) [2]
> Во вторых а что такое StrList
>
StrList-имя файла проверяемого на наличие в нем расширения.
> если ищешь ТОЛЬКО по расширениям и в них не используются
> ? и *,
Как раз таки используется
> добавляю в Listview
>
>
> А вот с этого места поподробнее.
добавляю так
with ListView1.Items.Add do
begin
Caption:=SR.Name;
и т.д.
end;
> Во первых весь список прогоняется от начала до конца, вне
> зависимости найдено или нет.
А как сделать чтобы не весь? В голову ничего другого не приходит.
AlexWlad (2006-05-20 21:07:00) [3]
> 13 (20.05.06 20:51) [3]
> добавляю в Listview
А вот с этого места поподробнее. Сколько примерно файлов в результате поиска? Listview при большом к-ве Итемов начинает жутко тормозить.
И еще, если ищешь ТОЛЬКО по расширениям и в них не используются ? и *, тогда имеет смысл перегонять их в СтрингЛист, а во время поиска делать
Strlist.Find(ExtractFileExt(SR.name));
Иначе вполне можно обойтись без
for i:=0 to OptionsForm.CheckListBox1.Items.Count-1 do
if OptionsForm.CheckListBox1.Checked[i]=true then
begin
CriteriaList.Add(Optionsform.CheckListBox1.Items[i]);
end;
Anatoly Podgoretsky (2006-05-20 21:05:00) [4]Во первых весь список прогоняется от начала до конца, вне зависимости найдено или нет.
Во вторых а что такое StrList
rar (2006-05-20 20:54:00) [5]просто на компе у друга а у него имя другое
13 (2006-05-20 20:51:00) [6]вот так помещаю
private
{ Private declarations }
Criterialist:TstringList;
.......
procedure TMainForm.GetCriteria;
var
i:byte;
begin
Criterialist:=TStringList.Create;
for i:=0 to OptionsForm.CheckListBox1.Items.Count-1 do
if OptionsForm.CheckListBox1.Checked[i]=true then
begin
CriteriaList.Add(Optionsform.CheckListBox1.Items[i]);
end;
end;
вот так проверяю
function TMainForm.proverka(StrList:string): boolean;
var
i:byte;
begin
Result:=false;
for i:=0 to CriteriaList.Count-1 do
begin
if Matchesmask(Strlist, CriteriaList.Strings[i]) then Result:=true;
end;
end;
Rashirenie:=AnsiLowerCase(SR.name);
if Proverka(Rashirenie)=true then
добавляю в Listview
Anatoly Podgoretsky (2006-05-20 20:45:00) [7]stringlist работает очень быстро, видимо ты неверно с ним работаешь.
AlexWlad (2006-05-20 20:40:00) [8]
> rar (20.05.06 20:38)
> ...все выбранные расширения из Checklistbox помещаю в Stringlist...
Ну и зачем дублировать???