-2

次のコードを考えると、どちらがより効率的ですか? 実際のメソッド 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;
}

私は、プロセッサの使用に関してどのコードがより効率的であるかを把握しようとしていましたが、それらは同じことを行います。テスト用に書いたコードが目的に合っているかどうか、またはコードに対して他の種類のテストを実行できるかどうかを知りたいです。私の調査結果によると、ハードコードの if ステートメントを使用し、最後の if ステートメントが常に実行されるにもかかわらず、ピース 2 は 9 倍効率的 (実行時間が 9 分の 1) であることがわかりました。

完全な作業プログラム

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;
    }
}
4

1 に答える 1

1

値を比較するより除算の方がコストがかかるため、最初の部分はおそらく遅くなります。

于 2012-02-18T23:46:18.603 に答える