Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.239.148] |
|
Сообщ.
#1
,
|
|
|
Написал программу, связанную с каталогизацией файлов на жестком диске. Файлы ищутся с помощью функций FindFirst и FindNext. Затем я открываю каждый найденный файл, читаю из него маленький фрагмент (1024 байта) и аккуратно закрываю файл. Так вот, обнаружилось, что большинство файлов открываются нормально, но некоторые (замечено за некоторыми файлами EXE и PDF) открываются по нескольку секунд! Фрагмент текста, которым это было установлено:
t1=GetTime(); //Опрашиваю "системные часы" MyTmp=FileOpen(FN,fmOpenRead | fmShareDenyNone); //Открываю файл с именем FN для чтения (имя FN формируется в соответствии с FindNext) t2=GetTime(); //Повторно опрашиваю системные часы __int64 t3; t3=MilliSecondsBetween(t2,t1); //Оцениваю время в миллисекундах, ушедшее на открытие файла if (t3>10000) //Если это время превосходит 10 секунд { UnicodeString ZZ; ZZ=t3; Memo2->Lines->Add(ZZ+FN); //помещаю значение времени и имя файла в табличку-отчет } Сначала обеспокоило, что индикация смены файлов затормаживается; заподозрил зависание программы и стал обвешивать отладочными маячками. Потом выяснил, что программа не зависает, а именно затормаживается с последующим возобновлением. Сужая область действия маячков сумел локализовать единственную строчку - операцию FileOpen. Отмечу, что во время каталогизации проблемные файлы не были открыты каким-то иным приложением. Вопрос: может быть, при открытии файла следует устанавливать какие-то другие атрибуты? Сталкивался ли кто-нибудь еще с подобной проблемой? |
Сообщ.
#2
,
|
|
|
Вангую за драйвер-фильтр антивируса. Для проверки теории надо не просто отключить антивирь, а вообще удалить, т.к. сдаётся мне, что драйвера файловой системы так просто антивирь не отключает.
|
Сообщ.
#3
,
|
|
|
Спасибо! Мне это как-то не пришло в голову. Проверил, точно такая же задержка у этих файлов даже при простом копировании TotalCommander'ом. Придется просто смириться.
|