powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как быстро читать большие тексовые файлы?
16 сообщений из 41, страница 2 из 2
Как быстро читать большие тексовые файлы?
    #39588733
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут был продемонстрирован пример работы WinApi функции - ReadFile

Нет никакой сложности перевести на c++

Siemargl,

А чего такого??? Одним махом быстрее xD Всего лишь 0,8 сек. Быстренько отработали с массивом что надо, и закрыли.

Увы - это практичнее, чем читать файл частями - искать нужное, и тратить драгоценное время. Когда всё тоже самое можно сделать за пару секунд, но используя при этом больше оперативной памяти


В конце - то концов, Java этим не брезгует. И даже не подтирает за собою)))
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588736
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик,

Что тебе было непонятно в первом моем посте??

Для залетных поясню, что задача - практическая, а твое частное теоретическое решение для мелких файлов - оффтоп.

Пиши нормальный вариант по теме топика и будешь велкам.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588740
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Я показал как читается файл размером 640 МБ (671 392 842 байт) за 0,8 секунд целиком .

И продолжаешь говорить что функция ReadFile для маленьких файлов ?

А ты смешной


Задача была - подсказать как можно быстро читать большие файлы.
Я показал, и не суть, что пример был на Delphi
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588742
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикТут был продемонстрирован пример работы WinApi функции - ReadFile

Нет никакой сложности перевести на c++

Siemargl,

А чего такого??? Одним махом быстрее xD Всего лишь 0,8 сек. Быстренько отработали с массивом что надо, и закрыли.

Увы - это практичнее, чем читать файл частями - искать нужное, и тратить драгоценное время. Когда всё тоже самое можно сделать за пару секунд, но используя при этом больше оперативной памяти


В конце - то концов, Java этим не брезгует. И даже не подтирает за собою)))

Подобный подход я тестировал во втором пункте, когда работал с памятью как с файлом (через объект QBuffer). В моем случае это оказался самый медленный вариант.

p.s. не думаю, что ребята из Qt налажали и как-то неудачно реализовали этот функционал. Скорее всего для моей задачи под win- платформой будет тоже самое.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588743
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Тогда как ты объяснишь это, что на Delphi это очень быстро работает? Да по любому косяк ваших c++ кодов.

Даже и сомневаться не надо, и пусть там компания которая заслуживает почёта

Ведь тесты чистые есть, и они показывают превосходные цифры в производительности
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588746
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик,

ты не понимаешь сути. я думаю, нечего с тобой обсуждать.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588747
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Как знаешь.


Я сделал ещё тесты, на этот раз загрузил файлик размером 1,97 ГБ (2 120 760 783 байт)

Потратив на это 71,545101

...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588776
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикSiemargl,

Как знаешь.


Я сделал ещё тесты, на этот раз загрузил файлик размером 1,97 ГБ (2 120 760 783 байт)

Потратив на это 71,545101



У меня 16,2 ГБ за 161 секунду обрабатывались. Если у вас указано время 71,54510 в секундах, то не вижу сверхестественных достижений. Но сравнивать вашу производительность с моей глупо: у нас разные исходные данные, а можно сравнивать только результаты одинаковых задач.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588779
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикReadLen:671392842 -- 640 МБ (671 392 842 байт)
ЗА 0,832291 секунд. WinApi функция - ReadFileНа такой скорости с HDD читаются только разреженные (sparse) файлы.
Даже для "обычных" SSD ~гигабайт в секунду - недостижимая фантастика.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588783
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Я написал код, и указал ближайший файл большой, который помнил. Запустил, сделал скрин. И отправил сюда.


AlekseySQLУ меня 16,2 ГБ за 161 секунду обрабатывались. Если у вас указано время 71,54510 в секундах, то не вижу сверхестественных достижений. Но сравнивать вашу производительность с моей глупо: у нас разные исходные данные, а можно сравнивать только результаты одинаковых задач.

У тебя SSD а у меня HDD который работает с 2010 года по 10 - 15 часов.

По этому, для моего 71,54510 для файла 2 гб. Это нормально

Тесты моего диска.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588784
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если открыть диспетчер во время работы моей программы.

То можно увидеть, что ReadFile из диска выжимает все соки, и читает на скорости 268 мб в секунду

...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588785
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикЯ написал код, и указал ближайший файл большой, который помнил. Запустил, сделал скрин. И отправил сюда.Проблема микробенчмарков не в том, чтобы их выполнить, а в том, чтобы выполнить их корректно .

HDD чисто физически не может читать со скоростью 640/.8 ~= 800МБ/с.
Скорость линейного чтения любых HDD не выходит за 300МБ/с.
Скорость линейного чтения диска 2010 года, учитывая тогдашние плотности, будет на уровне 80-130МБ/с, в зависимости от ёмкости.

А вот для разреженного файла, где надо просто забить память нулями или для файла, который был закэширован (тем же superfetch) и гигабайт в секунду - нормально.
Вот только к чтению с диска это никак не относится.

P.S. SSD у AlekseySQL - меня пока жаба давит.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588787
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Ну, вроде максимальный порог 268 мб/сек мой хард может, и если диспетчер не врёт, то мой хард вот

https://market.yandex.ru/product/1012789/spec?track=tabs


Интерфейс
Подключение SATA 3Gbit/s
Внешняя скорость передачи данных 300 Мб/с
Внутренняя скорость передачи данных 972 Мбит/с

Временные характеристики
Среднее время доступа, чтение 8.9 мс
Среднее время доступа, запись 10.9 мс
Время доступа full stroke 21 мс
Время доступа track to track 2 мс
Среднее время задержки (Latency) 4.2 мс


К тому - же, замер у меня ювелирно точный, до 0,000000 секунд.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588797
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикНу, вроде максимальный порог 268 мб/сек мой хард может, и если диспетчер не врёт, то мой хард вот
https://market.yandex.ru/product/1012789/spec?track=tabs
Интерфейс
Подключение SATA 3Gbit/s
Внешняя скорость передачи данных 300 Мб/с
Внутренняя скорость передачи данных 972 Мбит/с
Вы совершенно не то смотрите: 300МБайт/с - скорость обмена между кэшем диска и хостом. Т.е. память-память.
А вот 972МБит/с ~= 126МБайт/с это уже обмен данными "с пластинами" и эта цифра уже соответствует спецификациям WDC .
В точности вашей модели там нет, но есть аналогичная (по технологии и ёмкости).К тому - же, замер у меня ювелирно точный, до 0,000000 секунд.Это ещё одно заблуждение, которое проявится тогда, когда вы начнёте измерять интервалы на уровне долей миллисекунды.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588846
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLDima TМожно и map, только скорость не в этом. Отличие там не в чтении, а в разборе на строки. Там для разбиения на строки простейший поиск конца строки. В итоге получилось намного быстрее штатного fgets(). В топике вроде писал на сколько ускорилось, найти не смог.

У меня именно с map поиск конца строки (в одной большой строке) используется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
        QFile File(StringToQString(NameFile));
        if (!File.open(QIODevice::ReadOnly)) return;

        const char *p1 = (const char *) File.map(0, File.size());
        const char *p2;
        char buf[1024];

        while(true)
        {
            p2 = std::strchr(p1, '\n');
            if(p2 == NULL) break;

            strncpy(buf, p1, p2-p1+1);
            p1 = p2+1;
        }

        File.close();



И никакого прироста производительности не замечено.
Зачем тут strncpy() ? Размер ты знаешь, поэтому достаточно memcpy()

Добавь внутрь этого цикла простейший счетчик и просто посчитай сколько строк в файле. Засеки время - получишь максимальную скорость чтения, а дальше думай как эту скорость не растерять.

Можно в два потока организовать обработку: читаешь кусок файла, если в конце обрезанная строка, то переносишь ее в следующий блок, текущий блок отдаешь на обработку второму потоку, в след. блок дочитываешь из файла и т.д.
Если порядок обработки строк не играет роли, то обрабатывающих потоков можно больше одного запустить.
...
Рейтинг: 0 / 0
Как быстро читать большие тексовые файлы?
    #39588901
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Няшик]
У тебя SSD а у меня HDD который работает с 2010 года по 10 - 15 часов.
[quot]

Нет, первые тесты были сделаны на обычном HDD и я вопрошал: "А будет ли прирост производительности на SSD?". Кстати, скорость 100 Мб/сек вполне нормальная для HDD (который в синтетических тестах показывает примерно 130-150 попугаев).
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как быстро читать большие тексовые файлы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]