在fseek()之后fread()这么慢

时间:2014-12-30 12:37:54

标签: performance fopen fread fseek

我正在尝试读取一个大的二进制文件(~3GB),但是如果我从指定的指针位置开始读取则需要更长的时间。我不明白为什么会这样,我问我该如何解决这个问题呢?

我在下面给出一个示例代码以及我如何测量经过的时间。

int counter = 0;
char buffer[188];
FILE * m_pPlayFilePtr = fopen("binaryFile", "rb");

//get initial time here.

while ((feof(m_pPlayFilePtr) == false) && (counter< 2150))
{
  fread(buffer, 188, 1u, m_pPlayFilePtr);
  counter++;
}

//get final time here.

最终时间 - 初始时间~500ms

int counter = 0;
char buffer[188];
FILE * m_pPlayFilePtr = fopen("binaryFile", "rb");

fseek(m_pPlayFilePtr, 188000, SEEK_SET);

//get initial time here.

while ((feof(m_pPlayFilePtr) == false) && (counter< 2150))
{
  fread(buffer, 188, 1u, m_pPlayFilePtr);
  counter++;
}

//get final time here.

最终时间 - 初始时间~1500毫秒

编辑1

我已通过使用 setvbuf 功能更改缓冲区大小来解决此问题。

setvbuf(m_pPlayFilePtr, NULL, _IOFBF,  404200);

0 个答案:

没有答案