c++ - 每次需要时将整个文件从磁盘复制到内存以处理或读取文件中的数据,直到文件全部读取

标签 c++ c memory-efficient

我正在做一些非常关心效率的事情。有几千个文件,每个文件有300M那么大。每个文件至少包含 50 万个项目。我的工作是尽快处理每个项目。物理内存大小不是问题。所以。将整个文件复制到内存中并从内存中获取每个项目而不是从磁盘中获取每个项目,我会受益吗?还有其他方法可以节省IO过程中的时间吗?谢谢!

最佳答案

你可以使用 mmap(2) , madvise(2) , posix_fadvise(2) , 和 readahead(2)系统调用(注意 readahead 是特定于 Linux 的并且是阻塞的,您可能想提前调用它,或者在单独的线程中调用它)。

您可能不太关心:只需在处理前几秒钟提前读取每个 200Mb 的文件就足够了。内核文件系统和磁盘缓存做的很多;具有大量 RAM 数据的内存中已经存在。

而且您没有告诉我们您的程序是否是一个单一的持久进程,或者您是否通过一些重复的脚本在每个大文件上调用相同的程序来驱动它。

系统配置和硬件确实很重要。您可以使用大块(例如 16Kb 或 64Kb)配置文件系统(在 mke2fs 时)。如果您负担得起,SSD 磁盘会带来很​​多。

您还可以将您的应用程序设计为小心使用一些巧妙设置的数据库。

关于c++ - 每次需要时将整个文件从磁盘复制到内存以处理或读取文件中的数据,直到文件全部读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700874/

相关文章:

c++ - 窗外的QPushButton(灵感: CleanMyMac)

c++ - Cereal + Armadillo + json 序列化

Java使用volatile关键字内存效率高吗?

c++ - 2位位域数组对性能和缓存效率的影响?

c++ - 从文本文件 dlib C++ 中读取人脸 vector

c++ - 设置控件的背景颜色? (WinAPI)

c - 打印文件内容

c - 在存储到常量字符数组之前修改字符串

c - 如何打印有关我的代码执行的数据?