Bri*_*ian 8 c++ ifstream seek large-files seekg
在c ++中,使用istream :: seekg操作有多贵?
编辑:我可以通过寻找文件和读取字节来逃脱多少?频率与偏移幅度有何关系?
我有一个大文件(4GB),我正在解析,我想知道是否有必要尝试巩固我的一些seekg调用.我认为文件位置差异的大小起着作用 - 就像你在内存中寻找超过页面一样,它会影响性能 - 但是小搜索并不重要.它是否正确?
此问题在很大程度上取决于您的操作系统和磁盘子系统.
显然,搜索本身将基本上为零时间,因为它只是更新偏移量.实际上读取会从磁盘中提取一些数据......
......但是有多少数据取决于很多东西.您的磁盘有一个缓存,可能有自己的块大小,可能会进行某种预读.您的RAID控制器(如果有)将拥有自己的缓存,可能具有自己的块大小和预读.
你的内核有一个页面缓存 - 基本上都是所有的空闲内存 - 而且它也可能会进行某种预读.在Linux上,这是可配置的,内核将根据您的访问模式的顺序,是否已调用posix_fadvise等来调整它.
所有这些缓存意味着如果您访问某些数据,然后在以后访问附近的数据,则第二次访问可能根本不会实际触及磁盘.
如果您可以选择编码以便顺序访问文件,那么肯定会比随机读取更快,尤其是小型随机读取.在单个机械磁盘上寻找需要10ms的时间,所以你可以在这里进行数学计算.(虽然寻求固态驱动器的速度要快100倍.)
大读取通常比小读取更好......虽然处理数据一次几千字节可以比大块更快,如果它允许处理保持在缓存中.
简而言之,您需要提供有关系统和应用程序的更多详细信息以获得正确的答案,即使这样,最可能的答案是"基准测试".
| 归档时间: |
|
| 查看次数: |
3219 次 |
| 最近记录: |