制限はタイミング情報の正確さに関するものです。決定論的プロファ イラの正確さに関する根本的問題です。最も明白な制限は、(一般に)``クロッ ク''は .001 秒の精度しかないということです。これ以上の精度で計測するこ とはできません。仮に充分な精度が得られたとしても、``エラー''が計測の平 均値に影響を及ぼすことがあります。最初のエラーを取り除いたとしても、そ れがまた別のエラーを引き起こす原因となります。
もうひとつの問題として、イベントを検知してからプロファイラがその時刻を 実際に取得するまでに ``いくらかの時間がかかる'' ことです。プロ ファイラが時刻を取得する(そしてその値を保存する)までの間に、ユーザコー ドがもう一度処理を実行したときにも、同様の遅延が発生します。結果的に多 く呼び出される関数または多数の関数から呼び出される関数の情報にはこの種 のエラーが蓄積する傾向にあります。
この種のエラーによる遅延の蓄積は一般にクロックの精度を越える(1クロック 以下のタイミング)ところで起きていますが、一方でこの時間を累計可 能ということが大きな意味を持っています。
この問題はオーバーヘッドの小さい cProfile よりも profile においてより重要です。そのため、profile はプラットフォー ムごとに(平均値から)予想されるエラーによる遅延を補正する機能を備えてい ます。プロファイラに補正を施すと(少くとも形式的には)正確さが増しますが、 ときには数値が負の値になってしまうこともあります(呼出し回数が少く、確 率の神があなたに意地悪をしたとき :-) )。プロファイルの結果に負の値が出 力されても驚かないでください。これは補正をおこなった場合にのみ 現れることで、実際の計測結果は補正をおこなわない場合より、より正確なは ずだからです。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。