C:读取内存有限的大文件

问题描述

我正在做一些需要读取和写入大文件(或同等文件),但允许的内存非常小的事情(我没有确切的规格,但我们称其为“大” 15GB, (最小)16K)。该文件是随机访问的,通常以512字节的块的形式访问,并且可以保证有时连续的读取之间相隔很大的距离-可能实际上是磁盘的相反两端(或从两端开始有少量MB)。目前,我正在使用pread / pwrite命中文件中想要的位置(我以前使用过fseek,但由于原因而放弃使用了p(wread | write)来代替它。

以这种方式访问​​文件(可能很明显)很慢,我正在寻找一种方法来尽可能地优化/提高性能(使用外部库的使用受到限制(读取:否))。

我并不是说对我们正在做的事情过于谨慎,因此将其视为文件系统的驱动程序可能会有所帮助。在磁盘的一端,我们正在访问文件和目录表,在另一原始数据上,因此,我们需要写入文件信息,然后快速访问数据。但是即使在这样的区域内,也不要对布局做任何假设。不能保证多个文件(甚至单个文件的多个块)将连续存储-甚至紧密存储。这也意味着我们无法对数据读取的顺序进行假设。

我考虑过的几件事包括:

  • 为文件的不同部分打开多个文件描述符(但我不确定FD是否有任何状态以及是否会产生影响)
  • 一些有关缓存数据的技巧,我希望可以在短时间内访问几次

我想知道其他人是否曾经在类似的船上和/或有意见(或他们可以链接的文章)讨论了不同的策略以最大程度地减少阅读的影响。 我想我一直在想,在这种情况下,pread是否是正确的选择……。 任何想法/意见/批评/等等都不值得欢迎。

注意:该程序将始终在单个线程中运行(因此选项不必具有线程安全性,但同样也不会将读取操作推入后台)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...