std :: fstream - 慢读第二次

时间:2016-10-11 14:29:57

标签: c++ performance visual-studio g++ fstream

我在阅读大型二进制文件(2 GigaBytes)时遇到了fstream问题。使用此测试代码我创建fstream,然后读取直到EOF。然后清除标志并将位置重置到文件的开头。然后我再读一遍。问题是,第二次读取(第二次循环)总是明显变慢。

我需要为Embarcadero RAD Studio XE7解决这个问题。可以在MS Visual 2010中复制较慢的第二次读取的相同beheaviour。首先读取以HDD最大速度(大约140 MB / s)完成,第二次读取始终以四分之一(35 MB / s)完成。

奇怪的是,当我在Debian上使用g ++ 4.9.2时,第一次和第二次读数都是在我预期的同时完成的。

#include <stdio.h>
#include <cstdlib>
#include <fstream>
#include <string>

char buffer[400000];
int main()
{
    std::fstream stream;
    std::string filename = "largeFile.bin";
    stream.open(filename, std::ios_base::in | std::ios_base::binary);

    while(stream.good()){
        stream.read(buffer, 400000);
    }

    printf("first read complete");

    stream.clear();
    stream.seekg(std::ios::beg);

    while(stream.good()){
        stream.read(buffer, 400000);
    }

    printf("second read complete");
    stream.close();
    return 0;
}

我省略了两个周期的时间测量,因为它对于这个问题并不重要。

一旦打开文件,从开始到EOF多次阅读时我做错了什么?

0 个答案:

没有答案