Как я могу ускорить построчное чтение файла ASCII? (C ++)

Вот небольшой фрагмент кода, который является узким местом после выполнения некоторых измерений:

//-----------------------------------------------------------------------------
//  Construct dictionary hash set from dictionary file
//-----------------------------------------------------------------------------
void constructDictionary(unordered_set &dict)
{
    ifstream wordListFile;
    wordListFile.open("dictionary.txt");

    std::string word;
    while( wordListFile >> word )
    {
        if( !word.empty() )
        {
            dict.insert(word);
        }
    }

    wordListFile.close();
}

Я читаю ~ 200 000 слов, и это занимает около 240 мс на моей машине. Эффективно ли здесь использование ifstream ? Могу я сделать лучше? Я читаю о реализациях mmap () , но не понимаю их на 100%. Входной файл - это просто текстовые строки с окончанием строки * nix.

РЕДАКТИРОВАТЬ: Дополнительный вопрос для предлагаемых альтернатив: Будет ли любая альтернатива (за вычетом увеличения размеров буфера потока) означать, что я пишу синтаксический анализатор, который проверяет каждый символ на предмет новых строк? Мне нравится простой синтаксис потоков, но я могу переписать что-нибудь более мелкое, если мне нужно для скорости. Чтение всего файла в память - это жизнеспособный вариант, это всего около 2 МБ.

РЕДАКТИРОВАТЬ №2: Я обнаружил, что замедление для меня было из-за установленной вставки, но для тех, кто все еще заинтересован в ускорении построчного ввода-вывода файла, прочтите ответы здесь И посмотрите продолжение Мэттью М. по теме.

11
задан Community 23 May 2017 в 12:16
поделиться