|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
|
Обработка большого массива данных на C++10.11.2014, 11:18. Показов 7630. Ответов 37
Метки нет (Все метки)
Суть проблемы. На работе, дали задание проработать 1 большой файл (вывести графики результата анализа и т.д.).
Файл: двоичный. ~ 71 Мб ОЗУ: 512 Мб В итоге там получается работа с массивом структуры с over 1 млн. элементов в нем. Естественное, стандартная обработка всего массива, в виде пробега в цикле выполняется "нууу очень" долго. Я хотел бы узнать/спросить о различного рода существующих библиотеках, алгоритмах обработки больших данных в c++ и т.п. Прошу поделиться соображениями,ссылками, названиями и т.п. Буду весьма признателен.
0
|
|
| 10.11.2014, 11:18 | |
|
Ответы с готовыми решениями:
37
Обработка большого массива Тип данных для очень большого массива Обработка данных в виде массива структур средствами языка С++ |
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 15.11.2014, 08:03 | |
|
А зачем нужно считывать все блоки для определения их количества? Можно же разделить размер файла на размер блока и получить max_i. Сами блоки тоже можно разом считать.
0
|
|
|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
|||
| 16.11.2014, 09:21 [ТС] | |||
|
Мне бы как-нить памяти дополнительно выделить, а то прога выделят какое-то количество и зависает
0
|
|||
|
Заблокирован
|
|||
| 16.11.2014, 09:24 | |||
![]() Добавлено через 1 минуту
0
|
|||
|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
|||
| 16.11.2014, 14:00 [ТС] | |||
|
0
|
|||
|
Заблокирован
|
||
| 16.11.2014, 14:25 | ||
Если падает просто, то ставь new в try / catch и лови исключения с вероятной последующей обработкой. Смотри, какие исключения именно кидает.
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 16.11.2014, 14:29 | |
|
Размер структуры фиксирован, его можно сразу рассчитать и разделить размер файла на размер структуры, sizeof даёт размер сам по себе без какого-либо чтения.
Памяти можно выделить даже больше, чем доступно, там же виртуальная память используется, что-то будет выгружено на диск. И если размер файла 70 Мб, то это не так много.
0
|
|
|
Заблокирован
|
|
| 16.11.2014, 18:21 | |
|
nmcf, да ТС походу под кайфом посты лепит, какой - то не связанный бред
0
|
|
|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
|||
| 17.11.2014, 10:30 [ТС] | |||
|
Добавлено через 13 часов 51 минуту Загружается в память нормально(спокойно наблюдается в диспетчере как с ~4 Мб процесс забирает до 100 Мб памяти -> во время считывания двоичного файла.) Но вот как это обрабатывать, как это запихнуть в статический элемент Chart для вывода графика, там нуу очень много точек получается. До сих пор 0 идей. Пробовал сделать 10 нитей, распараллелить так сказать, все равно как-то виснет, да еще и проблема с синхронизацией владения компонентом между нитями(конкретно Chart). p.s. использовал CreateThread().
0
|
|||
|
Заблокирован
|
|
| 17.11.2014, 10:36 | |
|
Архив проекта в студию. Так же опиши по пунктам, что на данный момент на твой взгляд в нём работает не верно и в каких аспектах сего кода ты просишь помощи.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 17.11.2014, 10:39 | |
|
0
|
|
|
Заблокирован
|
|
| 17.11.2014, 10:51 | |
|
0
|
|
| 17.11.2014, 11:29 | |
|
Забыть про потоки и динамические массивы при чтении. Ничего из этого для обработки простейшей таблицы не требуется. 70 Mb - это "ни о чем". Отобразить файл на память и обрабатывать. Sin (если промеры покажут здесь задержку) можно посчитать один раз заранее (с нужным шагом) и оформить таблицей. Результат писать в другой файл потоком.
0
|
|
|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
||
| 18.11.2014, 17:35 [ТС] | ||
|
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 18.11.2014, 17:44 | |
|
Разом загрузить содержимое в массив структур без отображаемых файлов.
0
|
|
| 18.11.2014, 18:33 | ||
|
Вот в этой теме: "Есть очень много маленьких текстовых файлов необходимо слить в один файл" я выкладывал пример работы с MMF. Добавлено через 6 минут Собственно, если сделать cast к указателю на ваш тип данных, то можете обращаться к нужной структуре прямо по индексу.
0
|
||
|
15 / 0 / 2
Регистрация: 27.11.2012
Сообщений: 93
|
||||||||||||
| 20.11.2014, 10:37 [ТС] | ||||||||||||
|
Например: Кликните здесь для просмотра всего текста
Ну вот как-то так. Код следующий:
0
|
||||||||||||
| 20.11.2014, 13:11 | |||||||||||
|
1. На pView надо сделать приведение к нужному типу (сейчас это void*)
2. Структура должна иметь корректное выравнивание (либо в опциях компилятора, либо #pragma) Типа этого:
+ еще пример работы с MMF - чтение заголовка PE-файла (все структуры из <WINNT.H>):
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 3
|
|
| 28.02.2022, 12:22 | |
|
используйте Blockread или файлы отображаемые в память
0
|
|
| 28.02.2022, 12:22 | |
|
Обработка большого объема данных Обработка большого объёма данных (10гб) Обработка большого объема данных (теги сайта)
Многопоточная обработка большого массива через ThreadPool с возможностью остановки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|