|
|
|
Быстрое чтение файла11.11.2011, 10:59. Показов 20697. Ответов 71
Метки нет (Все метки)
Здраствуйте. Я пишу программу, которая читает файлы порядка от нескольких килобайтов до максимум 3 Мб. Посоветуйте пожалуйста, какие функции и/или алгоритмы использовать для максимальнобыстрого чтения данных, представленных вещественными числами. Прошу прощения, если мой вопрос неправильно сформулирован.
3
|
|
| 11.11.2011, 10:59 | |
|
Ответы с готовыми решениями:
71
Быстрое чтение массива из файла Быстрое чтение и запись файлов
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||
| 11.11.2011, 14:37 | |||||||
0
|
|||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||||||||||||||||||
| 11.11.2011, 14:37 | ||||||||||||||||||
|
IMHO, для ДОСи можно использовать
0
|
||||||||||||||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 11.11.2011, 14:42 | |
|
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 11.11.2011, 14:45 | ||
|
malloc, т.е. в динамической памяти
1
|
||
|
|
||||||||||||
| 11.11.2011, 15:01 | ||||||||||||
Чтобы перебить строку в вещественные числа strtok-ом парсим токены идущие через пробел char delim[] = " ";
Ну а на плюсах можно всем что выше написал не заморачиваться и сделать вот так программа с динамической памятью тут уже готовый проект считывания ifstream-ом
1
|
||||||||||||
| 11.11.2011, 15:03 | |
|
Не по теме: -=ЮрА=-, но вопрос то такой: происходит ли автоматическая буферизация двоичных потоков
0
|
|
|
|
|
| 11.11.2011, 15:15 [ТС] | |
|
Не по теме:
Спасибо всем большое, но у меня уже переполнение буфера в голове от такого кол-ва информации.
0
|
|
|
|
|||||||||||
| 11.11.2011, 16:37 | |||||||||||
|
Всё же я посьавил себе за цель проверить свои слова о быстроте,
для полноты анализа рассматривал сразу 3 алгоритма чтения вещественных в массив 1 - й вариант fscanf 2 - й буффер а затем подхват всего strtok-ом и atof-ом 3 - й любимый многими начинающими вариант ifstream>> Пришлось написать заполнитель файла - мой файл содержит 656898 double и весит 3,75 Мб) (вбивать вручную 3 Мб чисел я бы засел на дня 2) так что цепляю и код рандомного наполнителя файла тоже (наполняет файл долго - около 15 сек, ну дык и значений почти 660 тысяч) fill.cpp
Сам алгоритм чтения здесь read.cpp
Сравнительная таблица на миниатюре. Как видим быстро отработали 1-й и 2-й варианты, но спешу заметить посмотрите сколько операций именно во 2-м варианте - в два раза больше чем в 1-м, а время работы идентично, так что выводы делайте сами... PS:Плюсовый вариант прямого чтения ifstream>> явообще отбросил для себя (даже и не думал что это такой ужас в плане времени)
1
|
|||||||||||
|
|
|
| 11.11.2011, 18:44 [ТС] | |
|
Если не использовать cout, то на заполнение файла у меня ушло ~5 сек
![]() Чтение фсканфом у меня в 4 раза быстрее чем ifstream А strtok у меня not declared in this scope
0
|
|
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
||
| 11.11.2011, 18:47 | ||
|
з.ы. было бы информативно проверить результаты действия разных вариантов с точносттю не до секунды, а до миллисекунды. возможно разница всетаки есть.
0
|
||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||
| 11.11.2011, 18:50 | ||||||
|
Вот
2
|
||||||
|
|
|
| 11.11.2011, 19:04 [ТС] | |
|
У меня не работает
![]() error: 'readx' was not declared in this scope
0
|
|
|
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
|
||
| 11.11.2011, 19:09 | ||
|
поменяйте местами или объявите прототипы.
1
|
||
| 11.11.2011, 19:10 | |
|
Не по теме: Байт, а это что у вас за компилятор, который нашёл функции без объявления перед использованием?
0
|
|
| 11.11.2011, 19:10 | |
|
Помогаю со студенческими работами здесь
40
Быстрое преобразование фурье wave файла
Быстрое считывание 32кб из файла 7гб Быстрое создание пустого файла определенного размера Быстрое создание бинарного файла заданного размера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|