Я пытаюсь перенести программу 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 секунд.
Оба последних 2 кода, которые анализируют строки в char [] вместо string, требуют около 30 секунд больше для преобразования char [] в строку.
Есть ли способ повысить производительность кода на языке c / c ++, чтобы строка за строкой читала текстовый файл в соответствии с производительностью c #?
(Добавлено: я использую 64-битную ОС Windows 7 с VC ++ 10.0, x64)