Russian Qt Forum
Ноябрь 23, 2024, 08:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: fseek и буфер  (Прочитано 3221 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Сентябрь 04, 2010, 22:22 »

Добрый день

Столкнулся с неприятной проблемой медленного чтения файлов. Попробовал увеличить буфер чтения с помощью setvbuf (c 4K до 64К) но эффект оказался отрицательным. Поэтому предполагаю что причина в большом числе fseek. (часто назад на несколько байт) что заставляет перечитывать буфер снова и снова. Прав ли я и как с этим бороться?

Спасибо
Записан
BRE
Гость
« Ответ #1 : Сентябрь 05, 2010, 11:07 »

А в чем причина частого использования fseek на несколько байт назад?
Почему не закэшировать эти данные вместо их повторного чтения?
Или пересмотреть структуру файла, что-бы не нужно было производить эти перемещения.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Сентябрь 05, 2010, 12:08 »

А в чем причина частого использования fseek на несколько байт назад?
Почему не закэшировать эти данные вместо их повторного чтения?
Или пересмотреть структуру файла, что-бы не нужно было производить эти перемещения.
Да так-то оно так. Но этому куску уже лет 15 (если не все 20) и он велик, переделать его возможности сейчас нет. Хочется проскочить на шару  Улыбающийся
Записан
BRE
Гость
« Ответ #3 : Сентябрь 05, 2010, 12:23 »

Да так-то оно так. Но этому куску уже лет 15 (если не все 20) и он велик, переделать его возможности сейчас нет. Хочется проскочить на шару  Улыбающийся
И файл наверное очень большой? Сразу в память затягивать не получиться?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 05, 2010, 13:11 »

И файл наверное очень большой? Сразу в память затягивать не получиться?
В 99% - получится. Но остается злополучный 1%  Обеспокоенный  Код был написан на CodeWarrior у которого встроен буфер по умолчанию, а перенесли на Xcode - и поплыло
Записан
BRE
Гость
« Ответ #5 : Сентябрь 05, 2010, 14:51 »

IMHO, так просто ускорить не получиться.
Скорее всего придется писать свои функции, который будут учитывать особенность с перемещением указателя назад.
Наверное сразу стоит использовать мапинг файла в память.

Для адаптации же этих функций в старом коде использовать #define.

Это конечно костыль, но как я понял все равно ищется временное решение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.308 секунд. Запросов: 22.