雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

文字列出力とバイナリ出力の違い

文字列出力よりもバイナリ出力の方が速いだろうと思っていたが、最適化した場合には結果が逆になってしまった。
これはどういうことだろう。
Profileを見比べても、明らかにバイナリ出力の方が処理が単純で、速くなりそうな気がする。
一方の文字列出力は多くの処理が介在しており、一見すると複雑で遅そうだ。
色々考えてみたが、とりあえずは一つの可能性として、バッファリングの効果を仮定してみたい。
つまり、バイナリ出力が遅いのではなく、文字列出力がこのバッファリングの効果で実際よりも速くなっている可能性もあるのではないかと思うのだ。
ご承知の通りファイルの入出力処理は、CPUやメモリ上だけの処理に比べて時間がかかる。
そのため、その読み込み/書き出し回数を減らせば実行速度が向上することが、広く知られている。
そうした手法の一つに、バッファリングという技術がある。
これは入出力するデータを逐一読み書きするのではなく、ある程度の分量を溜め込んでまとめて処理するという方法である。
日本語エンコーディング扱う場合、1バイト1バイトづつを処理していくことはできないはずから、何バイトかを溜め込んでまとめて処理していると考えるのは自然である。
結果的に、その溜め込む処理の部分がバッファリングの効果を発揮しているというのもありえない話ではない。


まずは次回、バイナリストリームでバッファリングを行った場合の実行速度を見てみよう。