Есть две проблемы, связанные со спидом: время, которое требуется на самом деле
прочитайте данные и время поиска.
Вообще говоря, самый быстрый способ прочитать файл - это mmap
это (или
эквивалент под Windows). Это может осложниться, если весь
файл не помещается в адресное пространство, но вы упоминаете 10 ГБ в
заголовок; если поиск - это все, что вы делаете в программе, это не должно создавать
любые проблемы.
В более общем случае, если скорость является проблемой, избегайте использования getline
на
string
. Чтение больших блоков и сбор строк (как char[]
)
из них, без копирования, значительно быстрее. (Как простой
компромисс, вы можете скопировать, когда линия пересекает границу блока.
Если вы имеете дело с блоками по МБ или более, это не должно быть слишком
довольно часто; Я использовал эту технику на старых, 16-битных машинах с блоками
32 КБ, и все же получил значительное улучшение производительности.)
Что касается поиска, если вы ищете один, исправлено
строка (не регулярное выражение или другое сопоставление с образцом), вы можете
хочу попробовать поиск БМ. Если искомая строка
достаточно долго, это может иметь существенное значение по сравнению с другими
поисковые алгоритмы. (Я думаю, что некоторые реализации grep
будут
используйте это, если шаблон поиска на самом деле является фиксированной строкой и
достаточно долго, чтобы это имело значение.)