Текущий архив: 2007.07.01;
Скачать: CL | DM;
Вниз
Проблема поиска известных файлов Найти похожие ветки
← →
BAHbKA © (2007-05-02 15:20) [0]Здравствуйте!
Есть список файлов (>10К), нужно их найти и узнать размеры (int64). Проблема в том, что каждый последующий поиск происходит дольше, чем предыдущий, и эта нелинейность в конце концов приводит к стопору. Например, время поиска файла через каждые 3000 выборок: 5, 14, 21, 29 мс.
Пробовал делать через FindFirstFile и CreateFile, результат одинаковый.
Как можно решить эту проблему?
← →
clickmaker © (2007-05-02 15:32) [1]
> BAHbKA © (02.05.07 15:20)
как пробовал-то?
← →
BAHbKA © (2007-05-02 16:06) [2]В цикле:
...
// 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;
...
Может ещё как-то можно?
← →
Reindeer Moss Eater © (2007-05-02 17:30) [3]FindClose надо делать даже если файл не найден.
← →
BAHbKA © (2007-05-02 17:44) [4]Участок с FindClose взят из Sysutils.
Даже когда все файлы найдены результат такой же...
← →
begin...end © (2007-05-02 17:55) [5]> Reindeer Moss Eater © (02.05.07 17:30) [3]
Не надо.
Страницы: 1 вся ветка
Текущий архив: 2007.07.01;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.004 c