Previous: Test Coverage, Up: Debugging [Contents][Index]
プログラムは正常に機能しているものの、より高速または効率的に実行させたい場合にまず行うべきは、そのプログラムがリソースをどのように使用するか知るためにコードをプロファイル(profile)することです。ある特定の関数の実行が、実行時間のうち無視できない割り合いを占めるようなら、その部分を最適化する方法を探すことを開始できます。
このためにEmacsにはビルトインのサポートがあります。プロファイリングを開始するにはM-x profiler-startをタイプします。プロファイルはプロセッサー使用(processor usage)とメモリー使用(memory usage)、またはその両方を選択できます。何らかの処理を行った後にM-x profiler-reportとタイプすると、プロファイルに選択した各リソースがsummaryバッファーに表示されます。reportバッファーの名前にはそのレポートが生成された時刻が含まれるので、前の結果を消去せずに後で他のレポートを生成できます。プロファイリングが終了したらM-x profiler-stopとタイプしてください(プロファイリングに関連する多少のオーバーヘッドがあるため)。
profiler reportバッファーでは各行に呼び出された関数と、その後にプロファイリングが開始されてから使用したリソース(プロセッサーまたはメモリー)の絶対時間とパーセンテージ時間が表示されます。左側にシンボル‘+’のある行ではRETをタイプして行を展開して、高位レベルの関数に呼び出された関数を確認できます。もう一度RETをタイプすると、元の状態へと行が折り畳まれます。
jかmouse-2を押下すると関数の定義にジャンプします。dを押下すると関数のドキュメントを閲覧できます。C-x C-wを使用してプロファイルをファイルに保存できます。=を使用すれば2つのプロファイルを比較することができます。
elpライブラリーは別のアプローチを提案します。使い方はelp.elを参照してください。
benchmarkライブラリーを使用してEmacs
Lispフォームのスピードを個別にチェックできます。benchmark.el内の関数benchmark-run
とbenchmark-run-compiled
を参照してください。
configure
のオプションに--enable-profilingを使用してビルドすることにより、EmacsをCコードのレベルでプロファイルすることができます。こうしてビルドされたEmacsは、Emacsをexitするときにgprof
ユーティリティを使用して検証できるファイルgmon.outを生成します。この機能は主にEmacsのデバッグに有用です。このEmacsは実行状態から上述のM-x
profiler-…コマンドによりLispレベルで実際にストップします。