当前位置:  开发笔记 > 编程语言 > 正文

std :: ifstream明显慢于FILE吗?

如何解决《std::ifstream明显慢于FILE吗?》经验,为你挑选了1个好方法。

我被告知我的库比它应该慢,大约30+次解析特定文件(文本文件,大小326 kb)太慢.用户建议可能是我正在使用std::ifstream(大概是代替FILE).

我宁愿不盲目改写,所以我想我先在这里查看,因为我的猜测是其他地方的瓶颈.我读逐个字符,所以我使用的唯一的功能是get(),peek()tellg()/seekg().

更新:

我描述了,并且输出令人困惑 - gprof似乎并没有想到花了这么长时间.我重写了程序,首先将整个文件读入缓冲区,然后加速大约100倍.我认为问题可能tellg()/seekg()是花了很长时间,但gprof可能由于某种原因无法看到.在任何情况下,即使对于此大小,ifstream不会缓冲整个文件.



1> jalf..:

我不认为这会有所作为.特别是如果你通过char读取char,I/O的开销很可能完全支配其他任何东西.为什么一次读取单个字节?你知道这是多么低效吗?

在326kb文件上,最快的解决方案很可能是立即将其读入内存.

std :: ifstream和C等价物之间的区别基本上是一个或两个虚函数调用.如果每秒执行几十万次,它可能会有所不同,否则,不会重新进行.文件I/O通常很慢,用于访问它的API并不重要.更重要的是读/写模式.很多寻求都是糟糕的,顺序读/写是好的.


FILE和fstream都是缓冲的(尽管缓冲区可能太小),linux大大优化了磁盘访问,因此相对较小的文件将被加载到内存中(windows也会这样做).
一些输入流被缓冲.如果您的代码一次只读取一个char,那么这并不意味着底层流也会这样做.
取决于它缓冲多少等等.我愿意打赌,一次性阅读整个文件仍然会更快.
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有