ディスクシーク時間のテスト

1540 ワード

性能を分析する時、ファイルシステムの読み取り速度は不定で、主に時間が読み取りにかかるだけではなくて、またディスクの回転と道を探す上で使って、1段のコードテストのこれの時間を書いて、普通のハードディスクは10 msぐらいです.
2つの関数があり、1つ目の関数は50 Gデータを生成し、2つ目の関数はテストです.
package WebGis.Tile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Random;

public class testSeek {
	
	public static String  path="F:\\test.txt";
	public static long num=50000000L;
	
	public static int testnum=50000;
	/**
	 *  ,50G
	 * @throws IOException
	 */
	public static void write() throws IOException{
		File file=new File(path);
		if(!file.exists())
			file.createNewFile();
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		byte[] x=new byte[1024];
		for(long i=0;i<num;i++)
			raf.write(x);
		raf.close();
	}
	
	/**
	 *  500 , 
	 * @throws IOException
	 */
	public static void seek() throws IOException{
		System.out.println("bn");
		File file=new File(path);
		RandomAccessFile raf=new RandomAccessFile(file,"rw");
		long begin=System.currentTimeMillis();
		for(int i=0;i<testnum;i++){
			Random r=new Random();
			long l=r.nextLong();
			l=l%(num*1024);
			if(l<0)
				l=0-l;
			raf.seek(l);
			byte[] w=new byte[1];
			raf.read(w);// , 
		}
		long end=System.currentTimeMillis();
		System.out.println((end-begin)/testnum);
	}

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		seek();
	}

}