1

アプリの起動時間を短縮しようとしています (現在、Guice バインディングが遅いため、約 5 秒)。traceview を実行すると、同じ実行からの測定値にかなり大きな変動 (最大 30%) が見られます。コード。

これはガベージ コレクションの違いstartGCによるものだと思いますが、traceview によると、費やした時間はまったく重要ではありません。

測定値が非常に変動しやすい場合、最適化の効果を判断するのが非常に難しいため、これは特に悪化します。

なぜこれが起こるのですか?測定の一貫性を高める方法はありますか?

4

3 に答える 3

0

起動時にネットワーク関連のアクティビティを行っている場合、このツールは、何が起こっているのか、接続とキャッシュを最適化する方法を理解するのに役立ちます。http://developer.att.com/developer/legalAgreementPage.jsp?passedItemId=9700312

于 2012-07-16T10:27:39.530 に答える
0

測定はあなたの最終目標ではないようです。あなたの最終的な目標は、それをより速くすることです。

それを行う方法は、どの活動が時間の大部分を占めているかを見つけることです。そうすれば、それらを行うためのより良い方法を見つけることができます. 「測定」ではなく「発見」と言い、「ルーチン」ではなく「活動」と言いました。

これを行うには、プログラムの状態をサンプリングするだけで済みます。多くのプロファイラーは、プログラムの状態のサンプルを大量に収集しますが、それらはすべて同じ論理に陥ります。つまり、必要なのは測定値だけであり、実際には何を気にしないという理論に基づいています。

実際、要約を取得するのではなく、いくつかのサンプルを詳細に調べることができれば、プログラムがどのように時間を費やしているかについてより多くのことを知ることができます。

さらに、わずか 2 つのサンプルで、プログラムが何らかの目標を追求していることがわかり、それが大幅に改善できるものであれば、大幅なスピードアップが見られるでしょう。このプロセスは数回繰り返すことができ、それが実際に最適化する方法です。

このプロセスはこちらで詳しく説明されており、使用例はこちらにあります。

于 2012-07-15T20:03:08.193 に答える
0

手動でオンにするのではなく、コードからプロファイリングを開始していると思いますか? とにかく、コードの特定のポイントから使用Debug.startMethodTracingしても、さまざまな測定値が得られます。Debug.stopMethodTracing

ここで、Traceview が JIT を無効にしていることがわかります。また、他の最適化が行われているため、プロファイリング中のコードの実行は、JIT がない場合よりも遅くなります。また、コードのパフォーマンスはシステム全体の負荷に依存します。他のアプリがバックグラウンドで負荷の高い操作を実行している場合、コードの実行時間が長くなります。したがって、わずかに異なる結果が得られるはずであり、起動時間は一定ではありません。

一般に、メソッドの実行時間はそれほど重要ではありませんが、他のメソッドと比較してどれだけの CPU 時間を消費するかは重要ではありません。

于 2012-07-15T19:06:45.640 に答える