とりあえずどれくらい違うのか試してみたいなぁと思い、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