gpt4 book ai didi

c++ - std::ifstream 是否比 FILE 慢得多?

转载 作者:IT老高 更新时间:2023-10-28 23:09:15 25 4
gpt4 key购买 nike

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

我不想盲目地重写,所以我想我先在这里检查一下,因为我的猜测是瓶颈在其他地方。我正在逐字阅读,所以我使用的唯一函数是 get()peek()tellg()/seekg() .

更新:

我进行了分析,得到了 confusing输出 - gprof 似乎并不认为它花了这么长时间。我重写了程序,首先将整个文件读入缓冲区,它的速度提高了大约 100 倍。我认为问题可能是 tellg()/seekg() 花了很长时间,但 gprof 可能由于某种原因无法看到。在任何情况下,ifstream 确实 not 似乎缓冲了整个文件,即使对于这个大小。

最佳答案

我认为这不会有什么不同。尤其是当您逐个字符地读取时,I/O 的开销可能会完全支配任何东西。为什么一次读取单个字节?你知道它的效率有多低吗?

对于 326kb 的文件,最快的解决方案很可能是一次将其读入内存。

std::ifstream 和 C 等效项之间的区别基本上是一个或两个虚函数调用。如果每秒执行几千万次,可能会有所不同,否则,就不是真的。文件 I/O 通常很慢,以至于用于访问它的 API 并不重要。更重要的是读/写模式。很多查找都是不好的,顺序读/写是好的。

关于c++ - std::ifstream 是否比 FILE 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477225/

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