gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:06 24 4
gpt4 key购买 nike

我正在做一些非常关心效率的事情。有几千个文件,每个文件有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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com