Я пытаюсь перенести программу 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)