多个for in java里面的计时方法

Timing method inside multiple for in java

我在计算包含在多个 for 中的两种方法时遇到了问题。我正在使用 System.currentTimeMillis(); 。问题是我不知道把开始时间和结束时间放在哪里。我想为 methodA 和 methodB 的 5 次执行计时。 当我 运行 时,我得到方法 A 的 12 ms 和方法 B 的 0ms,但程序需要大约 10 分钟才能完成 运行。代码如下:

     int count = 0;
     double e = 0.3;
     long startTimeA;
     long endTimeA;
     long startTimeB;
     long endTimeB;
     long sumA = 0;
     long sumB = 0;

     for(int k=0; k<5; k++){
        startTimeA = System.currentTimeMillis();
        startTimeB = System.currentTimeMillis();
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double a = methodA();
               endTimeA = System.currentTimeMillis() - startTimeA;
               double b = methodB();
               endTimeB = System.currentTimeMillis() - startTimeB;

               int c = methodC();

            }
            sumA += endTimeA;
            sumB += entTimeB;
     }
  }
  System.out.println("total time A: " + sumA + " ms");
  System.out.println("total time B: " + sumB + " ms");

您应该了解 micro-benchmarking 以及如何在实践中做到这一点。

这里有一种方法可以完成您想要做的事情:

private void doSomething() {
    long startTimeA = System.currentTimeMillis();
    executeA();
    long endTimeA = System.currentTimeMillis();
    System.out.println("Total Time A: " + (endTimeA - startTimeA));

    long startTimeB = System.currentTimeMillis();
    executeB();
    long endTimeB = System.currentTimeMillis() - startTimeB;
    System.out.println("Total Time B: " + (endTimeB - startTimeB));
}

private void executeA() {
    for(int k=0; k<5; k++) {
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double a = methodA();
            }
        }
    }
}

private void executeB() {
    for(int k=0; k<5; k++) {
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double b = methodB();
            }
        }
    }
}
        for(int k=0; k<5; k++){
            sumA = 0;
            sumB = 0;
            for(int i = 0; i < 40; i++) {
                for(int j = i + 1; j < 40; j++) {
                    startTimeA = System.currentTimeMillis();
                    double a = methodA();
                    endTimeA = System.currentTimeMillis() - startTimeA;
                    sumA += endTimeA;

                    startTimeB = System.currentTimeMillis();
                    double b = methodB();
                    endTimeB = System.currentTimeMillis() - startTimeB;
                    sumB += endTimeB;

                    int c = methodC();
                }
         }
         System.out.println("total time A: " + sumA + " ms");
         System.out.println("total time B: " + sumB + " ms");  
      }

搬家

sumA += endTimeA;
sumB += entTimeB;

进入"for j"循环。