我有超过一百万行和每行7浮点数的colums大.txt文件。列通过空格分开。如何提高文件的阅读速度?
目前,我通过读取每行(getline),将行转换为流,然后将这七个值存储到数组变量中(请参阅我的最小示例)来导入文件。但是,这个过程非常缓慢,300万条线路(500MB)大约需要10分钟。这对应于0.8 MB/s,并且比写入文件要慢得多。我的硬盘是SSD。
你能告诉我如何提高代码效率吗?
最好成绩,费边
C++
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
struct Container { double a, b, c, d, e, f, g; };
void read_my_file(std::ifstream &file, Container *&data) {
std::string line;
std::stringstream line_as_stream;
unsigned int column;
unsigned long int row;
data = new Container[300000]; //dynamically allocated because the
//length is usually a user input.
for (row = 0; row < 300000; row++) {
getline(file, line);
line_as_stream.str(line);
for (column = 0; column < 7; column++) {
line_as_stream >> data[row].a;
line_as_stream >> data[row].b;
line_as_stream >> data[row].c;
line_as_stream >> data[row].d;
line_as_stream >> data[row].e;
line_as_stream >> data[row].f;
line_as_stream >> data[row].g;
}
line_as_stream.clear();
}
}
int main(void) {
Container *data = nullptr;
std::ifstream file;
file.open("./myfile.txt", std::ios::in);
read_my_file(file, data);
std::cout << data[2].b << "\n";
file.close();
return 0;
}
This answer [Efficiently reading a large large text file in C++](http://stackoverflow.com/questions/26736742/efficiently-reading-a-very-large-text-file-in-c)看起来相关。 – rtur
为什么不尝试直接使用'file >> some_string;'直接代替首先复制到'stringstream' – Arunmu
另外,你是否计划发布,优化你的应用程序的构建?还是它是一个“调试”,未优化的版本? – PaulMcKenzie