Скорость чтения текстового файла c ++

Я пытаюсь перенести программу c # на c ++. Программа на C # считывает текстовый файл размером от 1 до 5 ГБ построчно и выполняет некоторый анализ каждой строки. Код C # подобен приведенному ниже.

using (var f = File.OpenRead(fname))
using (var reader = new StreamReader(f))
    while (!reader.EndOfStream) {
        var line = reader.ReadLine();
        // do some analysis
    }

Для данного файла размером 1,6 ГБ с 7 миллионами строк этот код занимает около 18 секунд.

Код C ++, который я написал первым для миграции, выглядит следующим образом

ifstream f(fname);
string line;    
while (getline(f, line)) {
    // do some analysis
}

Приведенный выше код C ++ принимает около 420 секунд. Второй код C ++, который я написал, подобен приведенному ниже.

ifstream f(fname);
char line[2000];
while (f.getline(line, 2000)) {
    // do some analysis
}

Вышеупомянутый C ++ занимает около 85 секунд.

Последний код, который я пробовал, - это код c, как показано ниже.

FILE *file = fopen ( fname, "r" );
char line[2000];
while (fgets(line, 2000, file) != NULL ) {
    // do some analysis
}
fclose ( file );

Приведенный выше код c занимает около 33 секунд.

Оба последних кода, которые анализируют строки в char [] вместо строки, требуют еще около 30 секунд для преобразования char [] в строку.

Есть ли способ улучшить производительность c / c ++ код для чтения текстового файла построчно в соответствии с производительностью c #? (Добавлено: я использую 64-разрядную ОС Windows 7 с VC ++ 10.0, x64)

6
задан tk. 23 August 2011 в 05:34
поделиться