2012-03-18 31 views
0

私のプログラムをEclipseで実行したいのですが、プログラムを実行するのにどれくらい時間がかかるか見たいと思っています。言い換えれば私は自分のプログラムの時間を決めたいと思う。私は、UNIXでは、コマンドライン上でコマンドの前に "time"という単語を置くことで、どの操作でも時間を計ることができることを知っています。しかし、私はEclipseで私の操作をどのように時間を計ることができるかもしれないのか分かりません。すべてをもっと明確にするために、私は新しい方法を書くのを避けたいと思います。私の設定パスにsthを追加する方法はありますか?どのように私はそうすることができるのか誰にも分かりますか?Javaでの操作のタイミング

+0

本当にeclipseを実行する必要がありますか?ターミナルで走らせてみませんか? –

+1

プロファイラが必要です。 –

+0

私は窓のマシンを持っている、私はそうすることはできますか?私が窓のターミナルでそれを走らせることができれば、どうすればいいのか、親切に教えてくれますか? – BBB

答えて

1

アプリの最後にsystem.out.printlnを追加して、アプリケーションの実行時間を示します。

+0

あなたは、プログラムにコードを追加することを避けようとしています。 – BBB

5

あなたは2行のコードを追加し気にしない場合、あなたはJavaで純粋にこれを行うことができます:

public class Foo { 
    public static void main(String[] args) { 
     long ms = System.currentTimeMillis(); 

     // do whatever 

     System.out.println(System.currentTimeMillis() - ms); 
    } 
} 

あなたがそれを必要とする場合にも、nanoTimeを使用することができます。

+0

ありがとうございました。 – BBB

+0

@BBB結果を得るためには、shutdownhookを使用する必要があります。 – Java42

+0

@ChuckFricanoこれにはシャットダウンフックは必要ありません。両方のコード行が実行されることが保証されています。また、この回答があなたのために働いていれば、BBB、あなたはそれを受け入れるべきです(http://meta.stackexchange.com/a/5235)。 – Jeffrey

0

はあなたのコードのどこかでこのクラスを置く:

package your.package.name.common; 

import org.apache.log4j.Logger; 

import java.util.concurrent.TimeUnit; 

public class CProfile { 
    /** 
    * Logger for this class 
    */ 
    private static final Logger logger = Logger.getLogger(CProfile.class); 

    public static final int SECONDS_TO_ALERT = 2; 

    public static void slownessAlert(long startTime, String name) { 
     long seconds = TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS); 
     if (seconds>SECONDS_TO_ALERT){ 
      logger.warn("slow method detected: "+name+" "+seconds+"s"); 
     } 
    } 

} 

は、その後、次の方法であなたのコード内でこのスニペットを使用します。それが起こるとき

public void something() { 
    long startTime = System.nanoTime(); 

    //SOME HEAVY COMPUTATIONS 

    CProfile.slownessAlert(startTime, "something"); 
} 

それは遅さについてお知らせします(SECONDS_TO_ALERT> 2S )。

0

eclipseがウェブアプリケーションの場合は、speed-tracerプラグインを追加してください。これは、すべての時間を見つけるのに役立ちます。

0

これを実行して結果が得られることを保証する簡単な方法は、メインクラスの上部に次の行を追加することです。このコードは、アプリケーションの開始時間を保存し、JVMシャットダウン時の起動時間を記録して印刷するJVMシャットダウンフックを追加します。

final static long startTime = System.currentTimeMillis(); 
static { 
Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
     try { 
      System.out.println("My program ran for "+(System.currentTimeMillis()-startTime)+" seconds."); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}); 
}