Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.67
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

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

11.11.2011, 10:59. Просмотров 9474. Ответов 71
Метки нет (Все метки)

Здраствуйте. Я пишу программу, которая читает файлы порядка от нескольких килобайтов до максимум 3 Мб. Посоветуйте пожалуйста, какие функции и/или алгоритмы использовать для максимальнобыстрого чтения данных, представленных вещественными числами. Прошу прощения, если мой вопрос неправильно сформулирован.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 10:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрое чтение файла (C++):

Быстрое чтение массива из файла - C++
Добрый день, появился вроде бы не сложный вопрос, у меня есть динамический массив данных double ** data; // пусть 200x500 //я его...

Быстрое чтение и запись файлов - C++
Вопрос такой: имеется файл input.txt следующего вида: 5 12 6 7 44 2 1 2 3 4 5 2 343 634 54 1 123 2 345 56 56 11111 2222...

Быстрое заполнение большого файла - C++
Здравствуйте! Возникла проблема в работе с большим файлом: возникла необходимость быстро заполнять некоторый участок большого файла...

Быстрое считывание 32кб из файла 7гб - C++
Есть бинарный файл размером 6,95 ГБ, он представляет из себя массив short. Необходимо быстро считать случайные 65536 шортов. Т.к. весь файл...

Быстрое преобразование фурье wave файла - C++
Всем доброго времени суток! Сейчас работаю над дипломом, в c++ как и в обработке звука пока новичок. На данном этапе мне необходимо...

Максимальное быстрое создание большого файла - C++
У кого какие алгоритмы создания максимально быстро файлов, больших размеров?

71
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
11.11.2011, 23:09  [ТС] #61
Теперь ясно что стрток быстрее всех, что интересно, стрток не хотел работать в кодблоксе, но сразу заработал в дев-с++ с более старым мингвом
0
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
11.11.2011, 23:11 #62
Попробуйте потоки С++, но с разными настройками оптимизации. У gcc -O2 и -O3. Интересно, как тогда оно себя покажет.
1
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
11.11.2011, 23:14 #63
Байт, Когда критично время - не стоит юзать ООП.
2
Байт
Диссидент
Эксперт C
16827 / 11092 / 1743
Регистрация: 24.12.2010
Сообщений: 21,777
11.11.2011, 23:19 #64
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от programina Посмотреть сообщение
У меня не работает
error: 'readx' was not declared in this scope
Понял. Ваш исходный файл - cpp. А для плюсов предобъявление функций жизненно важно (из-за перегрузок). Стоит назвать его test.c и трансляция пройдет как по маслу. Ну, может быть пара Варингов выскочит (от настроек зависит)

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Байт, Когда критично время - не стоит юзать ООП.
Всеми четырьмя лапами - ЗА!
Но топик именно этому и посвящен
3
Thinker
Эксперт С++
4229 / 2203 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 23:21 #65
Цитата Сообщение от Байт Посмотреть сообщение
Но топик именно этому и посвящен
Именно, мы в Си пытаемся понять что к чему без ООП
1
-=ЮрА=-
Заблокирован
Автор 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 и использовать С++ методы обработки...

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

Не по теме:

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

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

Не по теме:

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

1
vetvet
13.11.2011, 14:52
  #70

Не по теме:

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

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

Не по теме:

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

0
Malysh-ok
1 / 1 / 0
Регистрация: 17.10.2013
Сообщений: 49
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, если по условиям задачи нужно макс. скорость чтения файла и мин. затраты памяти?
0
25.04.2015, 18:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2015, 18:43
Привет! Вот еще темы с ответами:

Быстрое создание пустого файла определенного размера - C++
Добрый день Столкнулся с проблемой как можно очень быстро создать файл на жестком диске, заполнены нулями (или мусором) за малый...

Быстрое создание бинарного файла заданного размера - C++
Собственно, вопрос в теме. Как быстро выделить память под файл? Можно, конечно, методично записать в файл массив необходимого размера, но...

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...


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

Или воспользуйтесь поиском по форуму:
72
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.