何かがシングル スレッド プログラムの実行に必要な時間の 10 倍の時間を要している場合、そのプログラムに対してプロファイラーを実行できます。また、「一時停止」ボタンで停止することもでき、それが何をしているかを正確に見ることができます.
本来より 10% 遅くても、何度も停止すると、やがて不要なことを繰り返すようになります。通常、問題は実際には必要のないスタックの途中にある関数呼び出しです。これは問題を測定しませんが、確かに見つけます。
編集:反対意見は、ほとんどの場合、サンプルを1つだけ取ることを前提としています。真剣に考えるなら、10 をとってください。40% のような無駄の割合を引き起こしているコード行は、平均して、サンプルのその部分のスタックに表示されます。(シングル スレッド コードの) ボトルネックは、そこから隠れることはできません。
編集:私の言いたいことを示すために、多くの反対意見は「十分なサンプルがないので、あなたが見るものは完全に偽物である可能性があります」という形をとっています - 偶然についての漠然とした考え. しかし、ルーティン内にいるだけでなく、ルーティンがアクティブであるだけでなく、何らかの認識可能な説明が 30% の時間有効である場合、特定のサンプルでそれが見られる確率は 30% です。
次に、サンプルが 10 個だけ取得されたとします。10 サンプルで問題が見られる回数は二項分布に従い、問題が0 回見られる確率は .028 です。1回見る確率は.121です。2回の確率は.233、3回の確率は.267で、その後落ちます。2 回未満で表示される確率は .028 + .121 = .139 なので、2 回以上表示される確率は 1 - .139 = .861 となります。原則として、2 つ以上のサンプルで修正できるものが見つかった場合は、修正する価値があります。
この場合、10 個のサンプルで見られる確率は 86% です。あなたがそれを見ていない 14% にいる場合は、見られるまでサンプルを増やしてください。(サンプル数を20に増やすと、2回以上見る確率が99%以上になります。)ですから、正確に測定したわけではありませんが、正確に見つけたので、それを理解することが重要です。プログラムカウンターではなく、データの状態に関係するものなど、プロファイラーが実際に見つけることができないものである可能性があります。