Форум программистов, компьютерный форум CyberForum.ru

Быстрое чтение файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.67
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.11.2011, 10:59     Быстрое чтение файла #1
Здраствуйте. Я пишу программу, которая читает файлы порядка от нескольких килобайтов до максимум 3 Мб. Посоветуйте пожалуйста, какие функции и/или алгоритмы использовать для максимальнобыстрого чтения данных, представленных вещественными числами. Прошу прощения, если мой вопрос неправильно сформулирован.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.11.2011, 23:09  [ТС]     Быстрое чтение файла #61
Теперь ясно что стрток быстрее всех, что интересно, стрток не хотел работать в кодблоксе, но сразу заработал в дев-с++ с более старым мингвом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.11.2011, 23:11     Быстрое чтение файла #62
Попробуйте потоки С++, но с разными настройками оптимизации. У gcc -O2 и -O3. Интересно, как тогда оно себя покажет.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2011, 23:14     Быстрое чтение файла #63
Байт, Когда критично время - не стоит юзать ООП.
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
11.11.2011, 23:19     Быстрое чтение файла #64
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
У меня не работает
error: 'readx' was not declared in this scope
Понял. Ваш исходный файл - cpp. А для плюсов предобъявление функций жизненно важно (из-за перегрузок). Стоит назвать его test.c и трансляция пройдет как по маслу. Ну, может быть пара Варингов выскочит (от настроек зависит)

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Байт, Когда критично время - не стоит юзать ООП.
Всеми четырьмя лапами - ЗА!
Но топик именно этому и посвящен
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 23:21     Быстрое чтение файла #65
Цитата Сообщение от Байт Посмотреть сообщение
Но топик именно этому и посвящен
Именно, мы в Си пытаемся понять что к чему без ООП
-=ЮрА=-
Заблокирован
Автор FAQ
12.11.2011, 17:48     Быстрое чтение файла #66
Цитата Сообщение от programina Посмотреть сообщение
я сделала на 40 дублей ~240 Mb :
strtok быстрее! 35 vs 26
- programina, я об этом и говорил ОЗУ всегда быстрее файлового парсинга, фактически при больших объёмах информации решаующую роль будет играть число операций в секунду, в случае съёмного носителя, даже HDD скорость передачи данных ограничена физически, тогда как в ОЗУ все операции происходят мгновенно...
Лично на своей практике, держал в опретивке 180 Мб(была матрица 5000х5000 + ычисления с ней - алгоритм отрабатывал где-то за 10 сек, а вот считывание этой матрицы из файла просто само по себе шло порядка 5-6 минут(там ещё преобразования считываемого были - вот и низкая скорость).

Добавлено через 13 минут

Не по теме:

PS:

Цитата Сообщение от programina Посмотреть сообщение
strtok быстрее! 35 vs 26
- я имел ввиду не быстроту strtok или fscanf, подразумевал предпочтение работы с данными из ОЗУ чем с данными на HDD или съёмнике (при малых, средних объёмах информации по отношению к объёму ОЗУ). Как варинт предлагаю мой вариант со strtok-ом заменить после чтения данных из файла на sscanf, как раз можно будет сравнить скорость файлового потока(fscanf) и потока данных из ОЗУ(sscanf)Позже и сам этим займусь, а ещё попрубую считать данные в std::string и использовать С++ методы обработки...

Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
13.11.2011, 01:21     Быстрое чтение файла #67
-=ЮрА=-, Пожалуйста, успокойтесь, вы уже давно не в теме, и ваши высказывания напоминают мне некоторые эпизоды, наблюдаемые когда-то мной в психбольнице щадещего профиля
Попробуйте понять - о чем речь. И что рвется из вашей души.
ЗЫ. В вашей квалификации я нисколько не не сомневаюсь
silent_1991
13.11.2011, 08:02
  #68

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
В вашей квалификации я нисколько не не сомневаюсь
Двойное отрицание намекает

-=ЮрА=-
13.11.2011, 12:27
  #69

Не по теме:

Рекомендую всем тут поменьше за глаза писать, я конечно понимаю из за монитора можно всё что хочешь лить, ну а так на улице послушал бы что тут каждый сказал бы, я то в себе уверен, а вы???
PS:Квалификации большинства собравшихся здесь мне остаётся только завидовать...

vetvet
13.11.2011, 14:52
  #70

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Рекомендую всем тут поменьше за глаза писать, я конечно понимаю из за монитора можно всё что хочешь лить
в зависимости от расположения ударения в слове "писать", получаются весьма интересные варианты.

-=ЮрА=-
13.11.2011, 15:25
  #71

Не по теме:

Цитата Сообщение от vetvet Посмотреть сообщение
в зависимости от расположения ударения в слове "писать", получаются весьма интересные варианты.
ну тогда мне остаётся псочувствовать тем кто вместо писать(уд на 2-й слог) делает перед монитором то о чём написалиЯ имел ввиду 1-е, а вы???

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2015, 18:43     Быстрое чтение файла
Еще ссылки по теме:

C++ Быстрое преобразование фурье wave файла
Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++
C++ Быстрое создание бинарного файла заданного размера

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Malysh-ok
 Аватар для Malysh-ok
1 / 1 / 0
Регистрация: 17.10.2013
Сообщений: 44
25.04.2015, 18:43     Быстрое чтение файла #72
День добрый.
Цитата Сообщение от Байт Посмотреть сообщение
Цитата Сообщение от Thinker
Буферизация всегда есть в текстовом и двоичном формате, теперь я это вижу. Но тогда как свой буфер точно такого же размера (а то и меньшего) в разы ускоряет процессы. Вот если встроенный буфер отключить, то собственный буфер сходит на нет.
Видимо fread не просто пересылает несколько байт из буфера, а еще о чем-то напряженно думает, потому лучше к нему обращаться пореже.
Так что мы оба оказались правы. что приятно.
Итоги дискуссии
1. Буфер создается для любого потока, если для его уничтожения не предпринимать специальных мер.
2. Тем не менее, в критических по времени случаях следует создавать собственный буфер, чтобы пореже обращаться к функциям fread, fwrite
Несколько вопросов:
1) Что подразумевается под "своим буфером"? То, что задаем в setvbuf() ?
Если да, то правилен ли код ниже и обеспечивает ли он макс. быстродействие?
C
1
2
3
4
5
6
7
8
9
BUFSIZ = 4096;
FILE f;
char buf[BUFSIZ];
f = fopen("test.tst", "rb");
setvbuf(f, buf, _IOFBF, BUFSIZ);
...
fread(buf, sizeof(char), BUFSIZ, f);
...
fclose(f);
2) Чем руководствоваться, при выборе значения BUFSIZ, если по условиям задачи нужно макс. скорость чтения файла и мин. затраты памяти?
Yandex
Объявления
25.04.2015, 18:43     Быстрое чтение файла
Ответ Создать тему
Опции темы

Текущее время: 04:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru