【发布时间】:2020-09-23 15:55:26
【问题描述】:
我通过分析器运行我的代码,发现大部分时间 (60%) 都花在了读取文件上。运行只需要几毫秒,但我想知道我是否可以让它更快。我的代码有 20 个文件的列表(从 1k 到 1M)。它打开一个,将整个文件读入 ram,处理它(顺序,读取所有内容一次),然后重复打开/读取/处理/关闭其余文件重用同一个缓冲区
我想知道是否有办法让任何事情变得更快?我尝试将 posix_fadvise 与 POSIX_FADV_SEQUENTIAL 和 POSIX_FADV_WILLNEED 一起使用,使用文件偏移量 len 作为0, 0 和0, st_size。这似乎没有什么不同。在阅读之前,我还没有编写代码来打开所有文件。那会有什么不同吗?我应该对所有这些都使用 posix_fadvise 吗?我应该使用 POSIX_FADV_SEQUENTIAL 还是 POSIX_FADV_WILLNEED?
【问题讨论】:
-
文件 IO 是一个常见的瓶颈。听起来您无能为力。
-
如果只有20M,把文件放到ramdisk上。或者使用 SSD。
-
如果不显示任何代码,很难看出如何优化您的代码。你想让我们猜吗?或者,您希望我们在所有可能的情况下为您提供最佳解决方案,而无需了解您的环境、架构、编译器或您是否有兴趣回答您的问题?