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

标签 c++ optimization file-io ifstream

我被告知我的库比它应该的要慢,解析特定文件(文本文件,大小 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/

相关文章:

c - 在C中为大程序分配内存

C++ Durand-Kerner 根查找算法与 GMP 崩溃,但与 long double 不崩溃

c++ - 以 sizeof ... (args) == 0 作为基本情况的参数包的函数无法编译

c# - 拆分 float

vb.net - 从 .NET 应用程序使用 if 条件运行 Powershell 脚本

java - 尝试将 csv 文件读入 Java 中的 ArrayList 但元素无意中合并?

c++ - Win32/pthreads 线程函数上的 volatile 正确性

c++ - 使用 C++ 的 Voltdb + gwan

java - Google Play 服务查找我的位置很慢

mysql - 优化 mysql 查询(喜欢/不喜欢)