ゆるゆるプログラミング

・時間計測

プログラムの中で時間を計測する方法を紹介します。

時間計測は、主に作成したプログラム処理の速度の確認に使用します。

プログラムの速度は、動作環境(OS,CPU,メモリ,HDDなど)・データ構造・アルゴリズムなどによって変わります。プログラムの中に時間計測を埋め込むことで、どの処理にどれくらいの時間はかかっているかを調べることができるので、改善するべき処理を見つけ易くなります。

時間の計測方法は、処理を開始した時刻と処理を終了した時刻との差で求めます。時刻を取得するメソッドにはcurrentTimeMillisがあります。これは現在の時刻をミリ秒単位で取得できるもので、この時刻の差を計算することでミリ秒単位の処理時間の計測が行えます。

System.currentTimeMillisメソッド

public static long currentTimeMillis()
■現在時刻をミリ秒単位で返します。

  パラメータ なし

  戻り値     エポック※からのミリ秒を返します。
             ※1970年1月1日午前0時0分0秒(世界標準時)

さらに短い処理時間を計測したい場合は、システムのタイマーを取得するnanoTimeというものがあります。これはナノ秒単位(1億分の1秒)で値を取得できるもので、この値の差を計算することでナノ秒単位の処理時間の計測が行えます。

System.nanoTimeメソッド

public static long nanoTime()
■システムタイマーの値をナノ秒単位で返します。

  パラメータ なし

  戻り値     システムタイマーの現在の値をナノ秒単位で返します。

以下は、それぞれのメソッド使ったソースコードです。参考にしてください。

TimeMeasurement1.java
001:    public class TimeMeasurement1 {
002:    	public static void main( String[] args ) {
003:    		// 開始時間をミリ秒で取得
004:    		long ts = System.currentTimeMillis();
005:    
006:    		// 時間のかかる処理(サンプル)
007:    		double total = 0.0;
008:    		for ( long i = 1; i <= 100000000; ++ i ) {
009:    			total += (double)i;
010:    		}
011:    
012:    		// 終了時間をミリ秒で取得
013:    		long te = System.currentTimeMillis();
014:    
015:    		// 処理時間 ミリ秒
016:    		long tmsec = te - ts;
017:    
018:    		// 処理時間 秒
019:    		double tsec = (double)tmsec / 1000.0;
020:    
021:    		System.out.println( "処理時間 : " + tmsec + "ミリ秒   " + tsec + "秒" );
022:    	}
023:    }

TimeMeasurement2.java
001:    public class TimeMeasurement2 {
002:    	public static void main( String[] args ) {
003:    		// 開始時間をナノ秒で取得
004:    		long ts = System.nanoTime();
005:    
006:    		// 時間のかかる処理(サンプル)
007:    		double total = 0.0;
008:    		for ( long i = 1; i <= 100000000; ++ i ) {
009:    			total += (double)i;
010:    		}
011:    
012:    		// 終了時間をナノ秒で取得
013:    		long te = System.nanoTime();
014:    
015:    		// 処理時間 ナノ秒
016:    		long tnsec = te - ts;
017:    
018:    		// 処理時間 ミリ秒
019:    		double tmsec = (double)tnsec / 1000000.0;
020:    
021:    		// 処理時間 秒
022:    		double tsec = tmsec / 1000.0;
023:    
024:    		System.out.println( "処理時間 : " + tnsec + "ナノ秒   "
025:    						  + tmsec + "ミリ秒   " + tsec + "秒" );
026:    	}
027:    }

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ