2017-01-05 67 views
1

我在多個for中包含的定時兩種方法有問題。我正在使用System.currentTimeMillis();。問題是我不知道在哪裏放開始時間和結束時間。我想要5次執行methodA和methodB。 當我運行它時,方法B的methodA和0ms得到12 ms,但程序運行需要大約10分鐘。代碼如下所示:java中的多重定時方法

 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"); 
+1

也許你想打印sumA和sumB而不是endTimeA和endTimeB? –

+0

對不起,這是我的意思是寫它的sumA,sumB – flower

回答

1

你應該閱讀有關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(); 
      } 
     } 
    } 
} 
+0

是的,但是如果我爲每種方法運行所有這些三次,不需要更多的時間,而不僅僅是一個? – flower

+1

我假設'methodA'和'methodB'是兩個獨立的方法,並且你想以某種方式對它們進行基準測試。單獨的'for'循環甚至不需要幾毫秒,時間將按照這兩種方法的主要複雜性。 – user2004685

1
 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"); 
     } 
+0

是的,但這個給了我每次執行的總時間,我想總共有5次執行 – flower

1

只是移動

sumA += endTimeA; 
sumB += entTimeB; 

成 「爲J」 循環。