私のライブラリは、特定のファイル (テキスト ファイル、サイズ 326 kb) の解析が 30 倍以上遅すぎるという報告を受けました。std::ifstream
ユーザーは、私が(おそらく の代わりに)を使用している可能性があると示唆しましたFILE
。
やみくもに書き直すのは嫌なので、最初にここを確認しようと思いました。私の推測では、ボトルネックは別の場所にあると思われます。私は文字ごとに読んでいるので、使用している関数はget()
、peek()
、およびtellg()/seekg()
.
アップデート:
プロファイリングを行ったところ、紛らわしい出力が得られました。gprof は、それほど時間がかかったとは考えていないようです。最初にファイル全体をバッファーに読み込むようにプログラムを書き直したところ、約 100 倍高速化されました。tellg()/seekg()
問題は時間がかかったことだと思いますが、何らかの理由で gprof がそれを見ることができなかったのかもしれません。いずれにせよ、このサイズであっても、ファイル全体をバッファリングするようには見えifstream
ません。