我有一个非常大的文本文件,大约20GB。 该文件包含多个文本行。
我需要以块的形式将此文件读入内存。每个块都足够适合主存储器。
最有效的方法是什么? - 读入缓冲区然后将数据解析为char []的C ++向量。 - 逐行读取文件并放入上面的矢量 - 或其他方式?
答案 0 :(得分:1)
最有效的方法是将块或数据块读入缓冲区而不是扫描缓冲区。
I / O有开销成本,每次请求可以获取的数据越多越好。
在内存中搜索总是比从输入中一次读取一个字符更快。
请注意两种情况:
编辑1:内存映射
另一种方法是让操作系统将文件视为内存。从本质上讲,操作系统将根据需要处理文件块或块中的读取。
您必须衡量性能(即个人资料),找出哪个方法更有效以及。
答案 1 :(得分:0)
这只是在答案中添加了一些代码:
#include <fstream>
#include <iostream>
const static size_t numToReadAtATime = 4;
int main()
{
std::ifstream s{ "filename.dat" };
while(true)
{
char nextChars[numToReadAtATime];
if(s.readsome(nextChars, numToReadAtATime) != numToReadAtATime)
break;
// dostuff with nextChars
}
}