我正在尝试读取一个大的二进制文件(~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);