とりあえずどれくらい違うのか試してみたいなぁと思い、utf8コーデック+put-stringだけの変更という形でベンチマーク。
ベンチーマークに使ったコードは以下。
(import (rnrs) (time) (sagittarius control)) (define times 10000) (define test-string "12345678901235678901234567890123456790123456789\r\n") (define tr (make-transcoder (utf-8-codec) 'crlf)) (time (let ((out (open-file-output-port "tmp.txt" (file-options no-fail) 'block tr))) (dotimes (i times) (put-string out test-string)) (close-output-port out)))これを0.3.2と開発版で比較。 結果は以下。
% ./build/sash.exe test.scm ;; 0.013002 real 0.016000 user 0.000000 sys % sash test.scm ;; 0.312032 real 0.141000 user 0.172000 sys上が開発版。びっくりするほど違う。これはやる価値ありだな。とりあえずやることにする。
書き出し側の実装完了。EOLの関係で多少パフォーマンスを犠牲にしたが、最終的には6倍くらい早くなった。
以下結果。
% ./build/sash.exe test.scm ;; 0.051995 real 0.031000 user 0.016000 sys % sash test.scm ;; 0.312968 real 0.171000 user 0.141000 sysEOLのチェックで一回舐める必要があるのが痛い。が、それでもこれだけ速度差があるのだから文句は言うまい。
No comments:
Post a Comment