![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема поиска известных файлов
BAHbKA © (2007-05-02 15:20:00)Здравствуйте!
Есть список файлов (>10К), нужно их найти и узнать размеры (int64). Проблема в том, что каждый последующий поиск происходит дольше, чем предыдущий, и эта нелинейность в конце концов приводит к стопору. Например, время поиска файла через каждые 3000 выборок: 5, 14, 21, 29 мс.
Пробовал делать через FindFirstFile и CreateFile, результат одинаковый.
Как можно решить эту проблему?
begin...end (2007-05-02 17:55:00) [1]> Reindeer Moss Eater © (02.05.07 17:30) [3]
Не надо.
BAHbKA (2007-05-02 17:44:00) [2]Участок с FindClose взят из Sysutils.
Даже когда все файлы найдены результат такой же...
Reindeer Moss Eater (2007-05-02 17:30:00) [3]FindClose надо делать даже если файл не найден.
BAHbKA (2007-05-02 16:06:00) [4]В цикле:
...
// 1
i64:=-1;
Hnd:= CreateFile( Pchar(s),
0,
FILE_SHARE_READ,
nil,
OPEN_EXISTING,
0,
0
);
if Hnd<>INVALID_HANDLE_VALUE then
BEGIN
i64:=getfilesize64(Hnd);
closehandle(Hnd);
END;
...
...
// 2
Hnd := FindFirstFile(PChar(s), FindData);
if Hnd <> INVALID_HANDLE_VALUE then
begin
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
i64:=FindData.nFileSizeHigh;
i64:=(i64 shl 32)or FindData.nFileSizeLow;
end;
Windows.FindClose(Hnd);
end
else i64:=-1;
...
Может ещё как-то можно?
clickmaker (2007-05-02 15:32:00) [5]
> BAHbKA © (02.05.07 15:20)
как пробовал-то?