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;只记住值的毫秒部分是没有意义的。

但是,请注意,这仅对非常非常粗略的指示有效(您说过该方法需要两分钟)。有关正确的基准测试,请参阅如何在 Java 中编写正确的微基准测试?

于 2016-08-25T09:50:57.180 回答