[Mew-dist 04750] emacs profile

Kazu Yamamoto ( 山本和彦 ) Kazu at example.com
1998年 5月 18日 (月) 21:34:13 JST


今まで Mew をプロファイラーにかけたことはありませんでしたが、今日尾上
さんに 「Libretto では使いものにならない」と言われ、焦ってプロファイラー
を探してみました。結論としては、Emacs 19 以降には profile.el が付いて
きており、少なくとも Emacs 20 以降の profile.el は使えることが分かりま
した。

使い方:
	(1) Mew を起動する
		e.g. M-x mew
	(2) profile.el を読み込む
		e.g. M-x load-library + "profile"
		Emacs 20 だと lisp/emacs-lisp/profile.el が読み込まれ
		る。Emacs 20 のは (require 'profile) でいいかな。
	(3) profile-functions-list に解析したい関数を定義。
		e.g. (setq profile-functions-list
		      '(mew-decode
			mew-decode-message
			mew-decode-rfc822-header
			mew-decode-singlepart
			mew-decode-multipart
			mew-decode-mime-header
			mew-header-arrange
			mew-highlight-header-region
			mew-cache-message))
	(4) 上記の設定を反映させる
		e.g. M-x profile-functions
	(4) Mew で適当に遊ぶ。
	(5) 結果を表示
		e.g. M-x profile-results
---
Function                      Calls  Total time (sec)  Avg time per call
===========================  ======  ================  =================
mew-cache-message                45          6.208570           0.137968
mew-highlight-header-region      45          1.195176           0.026559
mew-header-arrange               45          3.836575           0.085257
mew-decode-mime-header           39          0.400267           0.010263
mew-decode-multipart              2          0.103326           0.051663
mew-decode-singlepart            35          0.847463           0.024213
mew-decode-rfc822-header         45          2.888192           0.064182
mew-decode-message               45          4.179244           0.092872
mew-decode                       45          5.799290           0.128873
---

案の定、mew-header-arrange が遅いようです。mew-decode が遅いのは、入出
力のためだと信じていますが、本当にそうかはこれから確かめます。

私一人で解析するのは限界がありますので、遅いと思う関数を適宜設定して検
査し、やっぱり遅かったら教えて欲しいです。遅い関数を中心に高速化を考え
ます。

P.S.

profile というコマンドがまぜか "z\np\n" という予期せぬ文字列を返すので、
標準の profile.el では 1 回だけエラーが発生します。以下のパッチで無視
できますが、まぁ本質的でないので気にしなければそれでよいみたいです。

--かず

-------------- next part --------------
*** profile.el.orig	Mon May 18 21:10:29 1998
--- profile.el	Mon May 18 21:13:29 1998
***************
*** 107,114 ****
  
  (defun profile-filter (process input)
    "Filter for the timer process.  Sets `profile-time' to the returned time."
!   (if (zerop (string-match "\\." input)) 
!       (error "Bad output from %s" profile-timer-program)
      (setcar profile-time 
  	    (string-to-int (substring input 0 (match-beginning 0))))
      (setcdr profile-time 
--- 107,114 ----
  
  (defun profile-filter (process input)
    "Filter for the timer process.  Sets `profile-time' to the returned time."
!   (if (null (string-match "\\." input)) 
!       ()
      (setcar profile-time 
  	    (string-to-int (substring input 0 (match-beginning 0))))
      (setcdr profile-time 


Mew-dist メーリングリストの案内