もし私がプロファイラーのベンダーだったら、人々が望んでいると思うものが彼らが抱えている問題を解決しないとしても、彼らが望んでいると思うものを人々に提供することに関心を持たなければならないでしょう。
問題は、ルーチンが通常どれくらいの時間を要するかを知ることによって、いくつかの問題だけを見つけることができるということです。そのように見つけられない問題を無視すると、プログラムにかかる時間の支配的な部分になります。
私が言いたいことの例は、次の最近の例です: プログラムは実時間の 50% を .dll ファイルの読み取りに費やして、文字列リソースを検索し、ファイルの名前を取得して、文字列をスプラッシュ スクリーンに表示できるようにします。ユーザーは、アプリケーションの起動中に何かが起こっていることを確認できます。つまり、ユーザーに目を楽しませる別の方法があれば、アプリの起動速度が 2 倍になる可能性があります。このプロセス中、コール スタックは通常 15 ~ 20 関数の深さになるため、関数のタイミング番号だけでは何が起こっているのかを判断するのは非常に困難です。
問題を難しくしているのは、それがセマンティックであるということです。特定のルーチンは、スピードアップできるという意味で「ホット」ではありません。唯一の「ホット」なことは、プログラムが行っていることの全体的な一般的な説明であり、それを特定できるツールはありません。あなただけがそれを認識することができます。
ただし、単にプログラムを中断して起動時にコール スタックを調べた場合、費やされた時間の説明全体が表示される確率は 50% です。これを数回行うと、プロファイラーが見つけられるすべての問題を見つけることができるため、一部のプログラマーが依存するランダム一時停止テクニックの基礎となり、他のプログラマーはツールではないため軽視します。
そして、それをインタラクティブに行うか、pstackに類似したものを使用して少数のスタックサンプルを抽出します。