[mew-dist 22285] Re: accelerating by-folder
Hideyuki SHIRAI ( 白井秀行 )
shirai at example.com
2002年 11月 15日 (金) 16:19:58 JST
From: Kazu Yamamoto (山本和彦) <kazu at example.com> さん曰く
Subject: [mew-dist 22283] Re: accelerating by-folder
Message-ID: <20021115.153959.125106107.kazu at example.com>
Date: Fri, 15 Nov 2002 15:39:59 +0900 (JST)
> > 以前聞いた話だと、扱う list の長さが 10ぐらいまでは mapcar の方
> > が速いけど、それ以上なら while の方が速い、らしいとのことです。
>
> 最後に添付したコードで実験してみました。
>
> ----
> Function Name Call Count Elapsed Time Average Time
> ============= ========== ============ ============
> my-test2 1 0.071404 0.071404
> my-test 1 0.062207 0.062207
> my-while 10 0.07089 0.007089
> my-mapcar 10 0.0617159999 0.0061715999
> ----
>
> mapcar の方が速いです。でも、誤差なのでメモリー消費量の少ない、while
> の方が総合的にはよいと思われます。
これの実験は byte-compile する前ですよね?
kazu-* に名前を変えて、ぼくの folder-alist だと、car が大文字で
すぐ終わっちゃうので、鯉江さんのコードで
(setq kazu-alist
(let ((alist (make-list 2000 '("+foo/foo" . "foo"))))
(nreverse (cons '("+FOO/foo" . "foo") alist))))
に対して実行すると、(最初から while の方がちょっと速いですが)
Emacs-21.3.50 byte-compile 前
Function Name Call Count Elapsed Time Average Time
============= ========== ============ ============
kazu-test 1 0.419782 0.419782
kazu-test2 1 0.357072 0.357072
kazu-mapcar 10 0.4193099999 0.0419309999
kazu-while 10 0.3567439999 0.0356743999
Emacs-21.3.50 byte-compile 後
Function Name Call Count Elapsed Time Average Time
============= ========== ============ ============
kazu-test 1 0.221415 0.221415
kazu-test2 1 0.104153 0.104153
kazu-mapcar 10 0.221128 0.0221128
kazu-while 10 0.103865 0.0103865
Emacs の version とかで全然結果は違うと思いますが、2倍以上速度が
違います。mapcar の方が関数呼び出しが多いし、byte-compile すると
while は展開されるから、という理由だと思います。
> しかしながら、IMAP などのことも考えると、mew-local-folder-alist だけを
> 検査するのでは不十分だと分ったので、やっぱり mew-use-fast-refile を手
> で設定してもらうことにします。
こちらそれで問題ないのですけど、気になったので実験だけしました。
--
白井秀行 (mailto:shirai at example.com)
Mew-dist メーリングリストの案内