如何提高文件读取速度

How to increase file reading speed?

本文关键字:速度 读取 文件 何提高      更新时间:2023-10-16

我有超过一百万行的大型.txt文件,每行有7列浮点数。柱子通过空格分隔开。

目前,我通过读取每一行(getline)导入文件,将该行转换为流,然后将七个值存储到数组变量中(请参阅我的最小示例)。然而,这个过程相当缓慢,300万行(500MB)大约需要10分钟。这相当于0.8 MB/s,并且比写入文件慢得多。我的硬盘是固态硬盘。

你能给我一些如何提高代码效率的建议吗?

最佳,Fabian

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;
}

我认为这是因为C++默认情况下不是缓冲流。所以在第一个循环中,你只得到一行(因为它没有缓冲),通过迭代,你一次又一次地访问硬盘(这会很慢)。你可能想看看这个问题,它可能会对你有所帮助。