Мне нужно прочитать огромный файл 35G из диска по строкам на С++. В настоящее время я делаю это следующим образом:
ifstream infile("myfile.txt");
string line;
while (true) {
if (!getline(infile, line)) break;
long linepos = infile.tellg();
process(line,linepos);
}
Но это дает мне производительность около 2 МБ/с, хотя файловый менеджер копирует файл со скоростью 100 Мбит/с. Я думаю, что getline()
не выполняет буферизацию правильно. Пожалуйста, предложите какой-то буферизованный линейный подход к чтению.
UPD: process() не является узким местом, код без процесса() работает с той же скоростью.