C++ /快速随机访问在大文件中跳过

gal*_*tte 4 c++ file random-access

我有大文件,包含少量大数据集.每个数据集包含一个名称和数据集大小(以字节为单位),允许跳过它并转到下一个数据集.

我想非常快速地建立数据集名称的索引.文件示例大约21MB,包含88个数据集.通过使用std::ifstreamseekg()在数据集之间跳过快速读取88个名称需要大约1300毫秒,我想减少.

事实上,我正在读取大约30个字节的88个块,在21MB文件中的给定位置,需要1300ms.

有没有办法改善这一点,还是操作系统和文件系统限制?我在Windows 7 64bit下运行测试.

我知道在文件开头有一个完整的索引会更好,但文件格式没有这个,我们无法改变它.

mas*_*coj 5

你可以使用内存映射文件接口(我建议使用boost的实现.)

这将打开文件进入应用程序的虚拟页面,以便更快地查找时间,而无需返回磁盘.


nor*_*rca 2

您可以扫描文件并在单独的文件中使用密钥和索引创建自己的标头。根据您的用例,您可以在程序启动时和每次文件更改时执行一次。在访问大数据之前,在较小的文件中查找会为您提供所需的索引。