C ++读取大文本文件

时间:2015-07-14 19:04:11

标签: c++ performance

我有一个非常大的文本文件,大约20GB。 该文件包含多个文本行。

我需要以块的形式将此文件读入内存。每个块都足够适合主存储器。

最有效的方法是什么? - 读入缓冲区然后将数据解析为char []的C ++向量。 - 逐行读取文件并放入上面的矢量 - 或其他方式?

2 个答案:

答案 0 :(得分:1)

最有效的方法是将块或数据块读入缓冲区而不是扫描缓冲区。

I / O有开销成本,每次请求可以获取的数据越多越好。

在内存中搜索总是比从输入中一次读取一个字符更快。

请注意两种情况:

  1. 一行继续超过缓冲区的末尾。
  2. 缓冲区未填满。
  3. 编辑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

    }

}