Performance fread()在fseek()之后太慢了

Performance fread()在fseek()之后太慢了,performance,fopen,fread,fseek,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) == fals

我试图读取一个大的二进制文件(~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.

应该指出,对于TS MPEG,一个数据包有188个字节。您使用的是什么操作系统?什么类型的磁盘?你有多少内存?它是运行vxWorks操作系统的Intel Atom Z510&1GB内存,在板上使用8GB闪存。你读的只有400kB。我猜当你打开文件时,操作系统可能会提前读取大部分数据。在这两种情况下,在打开文件之前尝试启动计时器。即使我将代码放在fopen行之后的无限while循环中,经过的时间不会改变,它在每次迭代中都会振荡500&1500ms。
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.
setvbuf(m_pPlayFilePtr, NULL, _IOFBF,  404200);