|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 6
|
|
Быстрое чтение из файла24.02.2020, 14:12. Показов 4887. Ответов 7
Не подскажите, как быстро считать данные из файла? Вот пример файла:
4 3 qwe 10 sadv 2 sadv 1 blaaaa В первой строке идёт количество таких пар. Желательно как ещё можно разбить этот ввод на массив пар. Если использовать getline, то выполняется очень долго, так как количество таких пар может достигать 10^9. Возможно ли это сделать как-то побыстрее?
0
|
|
| 24.02.2020, 14:12 | |
|
Ответы с готовыми решениями:
7
Быстрое чтение массива из файла Быстрое чтение и запись файлов |
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
| 24.02.2020, 14:20 | ||||||
|
Потоковый ввод чем не устроил?
0
|
||||||
|
0 / 0 / 0
Регистрация: 24.04.2019
Сообщений: 6
|
|
| 24.02.2020, 15:15 [ТС] | |
|
Пирамидальная сортировка. Нужно отсортировать данные по ключу
Добавлено через 16 минут Потоковый ввод работает медленно. Программа не должна работать более одной минуты, сказано в условии задачи, а потоковый ввод на 10^8 работает уже больше минуты
0
|
|
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||||||||||||
| 24.02.2020, 19:50 | ||||||||||||||||
|
Не по теме: Дело было вечером, делать было нечего... Давайте посчитаем. Допустим, средняя скорость чтения/записи 100 МиБ/с. Пусть 1 строка занимает в среднем 16 байт, тогда чтение займет приблизительно Из любопытства попробовал прочитать указанным выше способом файл 20.4 ГиБ, и это заняло 77 с. Намного лучше, чем в теории (но это не точно). В 1 минуту всё равно не укладываемся. Думаем дальше. Узкое место тут - чтение небольшими порциями медленее, чем сразу большими блоками. Ок, пробуем считывать в бинарном режиме блоками по несколько мегабайт (выбрал 8 МиБ) и выделять записи из буфера. Теперь результат - 73 с. Так себе оптимизация, но в моем коде теперь свалка из string и stoul. gprof, настало твое время. Анализатор показал, что почти всё собственное время выполнения программы занимает вызов stoul, остальное - ожидание данных с диска. Хорошо, выбрасываем stoul и пишем свой велосипед. Еще попытка и результат - 34.6 с. Идеально, что даже не верится. В чем же подвох? Правильно, дисковый кэш, который сильно распух за время этих тестов. Для чистоты эксперимента сбрасываю кэш и повторяю первый и последний тест:
Чудес не бывает. Для желающих повторить эксперимент или сказать, что я индус Говнокод прилагается
0
|
||||||||||||||||
|
187 / 54 / 19
Регистрация: 23.12.2016
Сообщений: 167
|
|
| 24.02.2020, 20:00 | |
|
Программа должна работать на Windows или это просто абстрактный код? Если под винду, то есть winapi функции, которые работают примерно в 50-100 раз быстрее, чем getline. Как-то тоже занимался подобный вопросом, но у меня был маленький файл в 10-15 тыс строк, он и getline читался очень быстро, время в милисекундах измерялось.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 24.02.2020, 23:31 | ||
|
совершенно не годится для больших объёмов. 1. можно открыть файл как бинарный. и грузить сразу большими кусками. файл, который при помощи getline вычитывался 5 минут, в бинарном режиме был прочитан за несколько мгновений. 2. однако, наиболее эффективный и грамотный способ: заммапить файл в память. шиндовс
0
|
||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
|||
| 25.02.2020, 10:04 | |||
|
может, какие С-шные варианты быстрее, чем С++ ? или просто замена работы с string на работу c С-строками - ... == жаль линки не устанавливаются ? Добавлено через 1 минуту fooobar_com (_ заменить на .) и вставить туда, где порезан линк
0
|
|||
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 25.02.2020, 17:37 | ||
|
суть, видимо, как и dll находится в памяти
=== всё-таки есть и недостатки здесь нюансы - Отображение памяти - основные сведения
0
|
||
| 25.02.2020, 17:37 | |
|
Помогаю со студенческими работами здесь
8
Быстрое преобразование фурье wave файла Быстрое считывание 32кб из файла 7гб
Быстрое создание пустого файла определенного размера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|