多次读取后I / O流变慢

时间:2016-11-03 06:22:53

标签: c++ performance io stream bigdata

我在c ++中实现了一个范围搜索代码,我有一个大文件(20GB),我需要搜索不同查询的特定范围。
我已将大文件分成较小的块来固定搜索,其中我有两个级别的根和叶子,数据存储在叶子中(遵循ISAM树的相同想法)。

即: 我有3000万条数据线 每页分为30000页,100000行 一个根到每个页面的根(根有30000)。

然而,我注意到,一旦搜索范围从第200页或更高版本开始,流就会变得非常慢。我完成后关闭每一页。那么读取流变得非常慢有什么原因吗?

  • 我在linux机器上运行
  • 我没有选择执行多线程
  • 从这些文件开始顺序读取。

1 个答案:

答案 0 :(得分:0)

  

为什么阅读流变得很慢?

缓存未命中!

文件解析的速度在很大程度上取决于文件系统缓存。它们存在,然后解析将相对较快。如果没有,它就不会那么快。

你有一个大文件(20GB),这个文件太大而无法容纳缓存。结果,您的缓存将耗尽,程序将被强制从磁盘获取数据(这将严重损害性能)。