0

アプリケーション内でメソッドにかかる時間を測定しようとしていますが、問題は、タイミングが常に 0 秒を示していることです。以下のコードの何が問題になっていますか?

long currentTimeInMilis = System.currentTimeMillis() % 1000;

    public ClassName() {

        public void timeMethod() {

                long startOfmethod= currentTimeInMilis;

                methodToTime();

                long endOfMethod= currentTimeInMilis;

                long totalTime = endOfMethod= - startOfmethod;

                LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");                                            
             }
    }

問題は、ゼロ秒以上かかることはわかっていますが、毎回この出力を取得していることです。

Method took: 0:0:0:
4

1 に答える 1

4

currentTimeInMilis前後で同じ変数を使用しています。その間、魔法のように何かが変更されたわけではありません (そうでない限りmethodToTime、ローカル変数ではなくフィールドになっているため)。メソッドが呼び出される前の値と比較できる値を取得するには、メソッドが完了した後に実際に再度呼び出す必要があります。 System.currentTimeMillis()

たとえば、currentTimeInMilisフィールドを完全に削除して、***以下を参照してください。

public ClassName() {

    public void timeMethod() {

        long startOfmethod = System.currentTimeMillis(); // ***

        methodToTime();

        long endOfMethod = System.currentTimeMillis();   // ***

        long totalTime = endOfMethod = -startOfmethod;

        LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");
    }
}

も削除したことに注意してください% 1000。値のミリ秒部分だけを覚えておくのは意味がありません。

ただし、これは非常に大まかな指示に対してのみ有効であることに注意してください(この方法には2分かかるとあなたは言いました)。適切なベンチマークについては、Java で正しいマイクロベンチマークを作成するにはどうすればよいですか? を参照してください。

于 2016-08-25T09:50:57.180 に答える