テキストファイルから一行を速く読み込む方法
テキストファイルを読み込むときに、一度バッファに読み込んでしまったら改行ってどうやって判断するんだろう?と考えていた時期がありました。しかし今思えば、strchrで改行を検索してしまえば一発ということに気がつきました。
というわけで、毎回ファイルからfgetsしてくるのと、バッファから改行を検索する速度を比較をしてみました。テキストファイルはDirectXSDKサンプルにある『tiny_4anim.x』を使用しました。約80000行。
ファイルから読み込むサンプルとしてはfgetsを繰り返し、バッファから読み込むのはstrchrの後バッファ位置+1を回数分繰り返しました。
以下結果
回数 | ファイル | バッファ |
---|---|---|
5000 | 5ms | 0ms |
25000 | 19ms | 2ms |
50000 | 38ms | 4ms |
80000 | 69ms | 9ms |
圧倒的に速いですね。ただ、バッファだと文字列が繋がっているのでstrtokとは相性が悪そうです。一時的に文字列にコピーしないといけないでしょう。
ちなみにファイルからバッファに読み込むときの速度は[26ms]でした。(new,deleteを含む)
ならばサイズの小さいファイルの場合は直接ファイルから読み込んだ方が速いのではないか?と考えますが、約1400行の『tiger.x』だとバッファに格納するまで[0ms]。ファイル読み込み、バッファ読み込みはどちらかが0msから1msとまちまちでした。
結論としては、バッファに格納した方が読み込み速度は速いでした。使用メモリは大きくなりますけどね。