QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 12:23
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Языки и алгоритмы —› Как оперировать с ну уж очень большим файлом?

Посл.ответ Сообщение


Дата: 5 Сен,  09:55

QNX 6.3.0 sp2

Имеется текстовый файл, размер которого не позволяет запихнуть его в память тупым realloc'ом. Файл состоит из записей, отсортированных по некоему счётчику (для простоты - по времени выполнения записи, что является первым полем каждой записи). Есть слайдер, отражающий этот файл - по перемещению каретки необходимо вычитать текущую запись (понятно, что это будет примерно необходимая запись, более точно потом перемещаемся другими средствами. Это уже не суть важно...).

Если бы можно было бы ограничиться только Pt_SLIDER_REALIZED, то ИМХО достаточно было бы простого fseek() для быстрого доступа к плюс-минус нужному фрагменту файла. Однако при необходимости обработки Pt_SLIDER_DRAGGED эта идея уже не кажется столь соблазнительной.

Есть ли разумная альтернатива? Кэширование, хэширование, ещё какие-то умные слова?

Спасибо прочитавшим, большое - ответившим. С уважением, ZZZ


Дата: 5 Сен,  11:35

ZZZ
Pt_SLIDER_REALIZED

Pt_SLIDER_RELEASED
ZZZ
Однако при необходимости обработки Pt_SLIDER_DRAGGED эта идея уже не кажется столь соблазнительной.


Необходимо отображать только одну, две первые записи во время таскания ползунка. Взводить таймер на очень малое время, если за это время не пришло новое событие для перемещения - отрисовывать всё остальное. Если пришло событие перемещения, то позиционируемся на новое место и опять к началу алгоритма.

В идеале, конечно, отрисовка в другом потоке, этому потоку просто передается что, где и сколько отрисовывать, если пришло новое событие, то даем этому другому потоку новое задание, отменяя старое.


Дата: 5 Сен,  11:37

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


Дата: 5 Сен,  12:25 · Поправил: ZZZ

Да проблема не в том, что отрисовка отстаёт (хотя и в этом), а в том, что эти [autocensored] юзеры, обнаружив, что при движении слайдера картинка дивно меняется, начинают играться в калейдоскоп, быстро шуруя кареткой (хм. Сам такой).
В результате винчестер мучаем. Не могу придумать, как бы волков накормить, а овец уберечь.Чтобы не на каждое движение винчестер колебать. Заколебаем ведь.

Что значит индексировать файл? Номер записи - позиция в sream'е, или что Вы имеете ввиду?

С уважением, ZZZ


Дата: 5 Сен,  12:53

ZZZ
Не могу придумать, как бы волков накормить, а овец уберечь.Чтобы не на каждое движение винчестер колебать. Заколебаем ведь.

Тогда отрисовывать полностью, чтобы движение слайдера не доставляла удовольствия.
ZZZ
Что значит индексировать файл? Номер записи - позиция в sream'е, или что Вы имеете ввиду?

Именно, но только если размер записей плавающий.


Дата: 5 Сен,  13:36

Плавающий, ещё как. Как утка.
Да, видимо, так сделать и придётся. Таблица индексов вроде должна в память влезть.
Конечно, появляется пауза - время считывания файла+формирование таблицы, ну да ведь чудес, увы, не бывает.
Спасибо.

С уважением, ZZZ

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source