我被告知我的库比它应该慢,大约30+次解析特定文件(文本文件,大小326 kb)太慢.用户建议可能是我正在使用std::ifstream
(大概是代替FILE
).
我宁愿不盲目改写,所以我想我先在这里查看,因为我的猜测是其他地方的瓶颈.我读逐个字符,所以我使用的唯一的功能是get()
,peek()
和tellg()/seekg()
.
更新:
我描述了,并且输出令人困惑 - gprof似乎并没有想到花了这么长时间.我重写了程序,首先将整个文件读入缓冲区,然后加速大约100倍.我认为问题可能tellg()/seekg()
是花了很长时间,但gprof可能由于某种原因无法看到.在任何情况下,即使对于此大小,ifstream
也不会缓冲整个文件.
我不认为这会有所作为.特别是如果你通过char读取char,I/O的开销很可能完全支配其他任何东西.为什么一次读取单个字节?你知道这是多么低效吗?
在326kb文件上,最快的解决方案很可能是立即将其读入内存.
std :: ifstream和C等价物之间的区别基本上是一个或两个虚函数调用.如果每秒执行几十万次,它可能会有所不同,否则,不会重新进行.文件I/O通常很慢,用于访问它的API并不重要.更重要的是读/写模式.很多寻求都是糟糕的,顺序读/写是好的.