Если я измерил время, необходимое для выполнения фрагмента кода, я знаю, насколько эффективен код?ДЖАВА - PullRequest
0 голосов
/ 19 февраля 2012

Учитывая следующие фрагменты кода, какой из них более эффективен?Реальный метод returnSomething () также может возвращать 0 в реальности, поэтому требуется try / catch.

//piece one
long sleepTime = 200;
try{ sleepTime /= returnSomething();}
catch(Exception e){sleepTime = 200;}
private int returnSomething(){
   return 1;
}

              //or

//piece two
long sleepTime = 200;
if(returnSomething() == 3){sleepTime = 67;}
else if(returnSomething() == 2){sleepTime = 100;}
else if(returnSomething() == 1){sleepTime = 200;}
private int returnSomething(){
   return 1;
}

Я пытался выяснить, какой фрагмент кода более эффективен с точки зрения использования процессора, они делаюттоже самое.Я хотел бы знать, подходит ли код, который я написал для тестирования, для этой цели или могу ли я проводить другие виды тестирования кода.Мои результаты показывают, что часть 2 в 9 раз более эффективна (в 9 раз меньше времени для выполнения), хотя она использует жесткие коды операторов if и последний оператор if всегда выполняется.

Полная рабочая программа

public class CodePerformanceTester
{
    public static void main(String[] args){
        CodePerformanceTester tester = new CodePerformanceTester();
        tester.start();
    }

    public void start(){
       double start = System.currentTimeMillis();
       long sleepTime = 200;
       for(int i=0; i<10000000; i++){

           //uncoment here the two lines below
           //try{ sleepTime /= returnSomething();}
           //catch(Exception e){sleepTime = 200;}

           //coment the IF STATEMENTS when above code uncomented
           if(returnSomething() == 3){sleepTime = 67;}
           else if(returnSomething() == 2){sleepTime = 100;}
           else if(returnSomething() == 1){sleepTime = 200;}
       }
       double end = System.currentTimeMillis();
       System.out.println("Execution time for 10 million iteration was "+(end-start)+" ms.");
    }


    private int returnSomething(){
       return 1;
    }
}

1 Ответ

1 голос
/ 19 февраля 2012

Первый фрагмент, вероятно, медленнее, потому что деление обходится дороже, чем сравнение значений.

...