如何提高文件读取速度
How to increase file reading speed?
我有超过一百万行的大型.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++默认情况下不是缓冲流。所以在第一个循环中,你只得到一行(因为它没有缓冲),通过迭代,你一次又一次地访问硬盘(这会很慢)。你可能想看看这个问题,它可能会对你有所帮助。
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 加快在C++中读取/处理日志文件的速度
- 如何提高文件的读取速度?
- QT 5.7 串口读取速度很慢
- 如何在 Ubuntu 上提高我的程序磁盘读取速度
- boost::unique_lock,多次读取会减慢写入速度
- C++-为什么标记化器从文件中读取行的速度如此之慢
- 对齐数据:速度取决于恒定数据读取的相对采样大小和采样频率
- C++ 提供 SSE 指令,以最快的速度读取文件
- C++ ifstream::由于memcpy,读取速度慢
- 为什么从内存映射文件中读取速度如此之快
- 可以提高iostream读取和压缩gzip文件的速度
- Windows XP在C++中启动时读取文本文件的速度较慢;预取
- FILE_FLAG_IO_BUFFERING会减慢同步读取操作的速度
- STL文件的哪种格式读取速度更快:ascii还是二进制
- C++逐行读取文本,需要节省速度/效率
- QTcpSocket每~0.5s才读取一次数据,即使是非常小的数据包,任何方法都可以加快速度
- 速度控制在100Hz至10KHz范围内读取小记录从文件上的窗口
- 如何加快从流到内存的读取速度
- 如何使用c++在Windows上提高读取数据的速度