我被告知我的库比应有的速度慢,解析特定文件(文本文件,大小 326 kb)的速度慢了 30 倍以上。用户建议这可能是我正在使用std::ifstream
(大概不是FILE
).
我不想盲目重写,所以我想我应该先检查这里,因为我的猜测是瓶颈在其他地方。我正在逐个字符地阅读,所以我使用的唯一功能是get()
, peek()
, and tellg()/seekg()
.
Update:
我进行了分析,并得到了令人困惑的 https://stackoverflow.com/questions/485649/confusing-gprof-output输出 - gprof 似乎并不认为花了这么长时间。我重写了程序,首先将整个文件读入缓冲区,速度提高了大约 100 倍。我认为问题可能在于tellg()/seekg()
这花了很长时间,但 gprof 可能由于某种原因无法看到这一点。任何状况之下,ifstream
does not似乎缓冲整个文件,即使对于这个大小。
我认为这不会有什么不同。特别是如果您逐个字符地读取,I/O 的开销可能会完全占主导地位anything别的。
为什么一次读取单个字节?你知道它的效率有多低吗?
对于 326kb 文件,最快的解决方案很可能是立即将其读入内存。
std::ifstream 和 C 等价物之间的区别基本上是一两个虚函数调用。如果每秒执行几千万次可能会有所不同,否则就不是真的。文件 I/O 通常非常慢,以至于用于访问它的 API 并不重要。更重要的是读/写模式。大量的查找是不好的,顺序读/写是好的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)