Лучший способ прочитать 12-15GB ASCII файл в C ++ - PullRequest
3 голосов
/ 29 июня 2011

Я пытаюсь посчитать количество строк в огромном файле.Этот ASCII-файл имеет размер 12-15 ГБ.Прямо сейчас я использую что-то по строкам readline () для подсчета каждой строки файла.Но, конечно, это очень медленно.Я также пытался реализовать чтение более низкого уровня с использованием seekg () и tellg (), но из-за размера моего файла я не могу выделить достаточно большой массив для хранения каждого символа для запуска сравнения \ n (У меня 8 ГБ оперативной памяти).Что будет более быстрым способом чтения этого смехотворно большого файла?Я просмотрел много постов здесь, и у большинства людей, похоже, нет проблем с ограничением 32-битной системы, но здесь я вижу это как проблему (исправьте меня, если я ошибаюсь).

Также, если кто-нибудь может порекомендовать мне хороший способ расщепления чего-то такого большого размера, это также будет полезно.

Спасибо!

Ответы [ 4 ]

6 голосов
/ 29 июня 2011

Не пытайтесь прочитать весь файл сразу.Если вы считаете строки, просто читайте кусками заданного размера.Пара МБ должна иметь разумный размер буфера.

4 голосов
/ 29 июня 2011

Попробуйте Увеличить файлы, отображаемые в память , один код для платформ Windows и POSIX.

3 голосов
/ 29 июня 2011

Отображение памяти для файла не требует, чтобы у вас было достаточно оперативной памяти для хранения всего файла.Я успешно использовал эту технику с файлами до 30 ГБ (я думаю, что на этой машине было 4 ГБ ОЗУ).Вам понадобится 64-битная ОС и 64-битные инструменты (я использовал Python во FreeBSD) для того, чтобы иметь возможность обращаться с этим большим количеством.

Использование отображенного в память файла значительно повысило производительность по сравнению с явным чтением блоковфайла.

0 голосов
/ 29 июня 2011

на какой ОС вы работаете?на этой платформе нет wc -l или эквивалентной команды?

...