1

アプリケーションが動作している間、どのコマンドにも応答しなくなり、CPU が 100% 使用されていることがわかりました。プロファイラーを使用したところ、アプリケーションの時間の 99% が 1 つのメソッドで費やされていることがわかりました (これは予想外です)。

このメソッドが繰り返し呼び出されているのか、内部のどこかで「循環」しているのか (またはおそらくデッドロック) はわかりません。

プロファイラーの結果から多くの情報が得られませんでした:

スクリーンショット

互いに近い 2 つの線の数値がこれほど異なる (一方は 16%、もう一方は 0.2%) 理由がわかりません。

問題がどこにあるかをどのように把握できますか?

4

2 に答える 2

2

プロファイリング セッションを改善するには、 Instrumentation を使用します。これにより、メソッドが呼び出された回数がわかります。この「呼び出し階層」を使用して、再帰呼び出しを検出することもできます。

編集:ウィザードで利用できます

パフォーマンス ウィザードの起動

于 2012-09-12T18:33:29.637 に答える
0

と比較curPriceしていmoveToます。これらのいずれかが多くのコードを実行するために実行される可能性のあるプロパティですか、それともそれらの 1 つが比較演算子をオーバーロードしていますか? curPrice通常、 は以下のようmoveToに見えるため、最初の比較に 16% の時間を費やし、次にskipped...Bid簡単にテストされ、0 より大きく、2 番目のcurPrice比較に同じ時間を費やしているように見えます。それは最初にしました。

つまり、これらの比較をより迅速に行う方法を見つけることで、最大 32% の時間を節約できる可能性があります。これは、1/(1 - .32) = 1.47、つまりほぼ 50% の高速化係数です。

私は多くのパフォーマンス チューニングを行っており、プロファイラーは使用していません。私はこの方法を使用 していますが、他の人もそうしています。このコードの 10 個のスタック サンプルを取得した場合、平均で 3.2 個のサンプルが、スタック上のこれらの比較のいずれかと、その理由を示します。正確なパーセンテージはわかりませんが、それは問題ではありません。修正するのに十分な大きさです。

于 2013-01-28T22:20:24.093 に答える