在运行期间,我经常需要读取较大文件(300 MB)的小部分。 目前,我总是打开的文件,从中读取,然后再次关闭它这样的:C++从大文件快速读取的最佳方式
FILE *file =fopen(szFileName,"rb");
if (file)
{
fseek(file,iFirstByteToRead, SEEK_SET);
fread(nEncodedBytes,sizeof(unsigned char), iLenCompressedBytes, file);
fclose(file);
}
但那是太慢了,因为我做的如此频繁。 另外我不确定fread是否可以加速。
请问这种情况的最佳做法是什么?
你不能做太多的事情。原因在于,与存储器访问相比,在大文件中查找位置和从磁盘读取数据是非常缓慢的操作。该文件太大 - 最佳值为64/128 Mb(正如Google在他们的数据库中所证明的那样)。而且,如果你经常这样做,你很可能会很快损坏磁盘。 – SChepurin
这不是C++,虽然 – blue