我使用ImDisk创建了256MB的RAM磁盘,并使用简单的基准测试软件CrystalDiskMark比较了HDD和Ram磁盘的读写速度。如预期的那样,CrystalDiskMark显示RAM磁盘比HDD快10倍。
但是,我尝试将数据保存到RAM磁盘和HDD,期望RAM磁盘更快,并且两者所需的时间相同。我用Java编写了以下代码,创建了JAR可执行文件,并在HDD和Ram Disk中运行了该可执行文件。此代码创建一个16x16的黑色图像,在本地保存100个不同的PNG文件副本,并在终端中打印保存每个文件所用的时间,平均值和总时间。
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
public class SaveImageSpeedTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_3BYTE_BGR);
long n = 100;
long total_time = 0;
for(long i=0; i<n; i++) {
try {
long time = System.nanoTime();
ImageIO.write(img, "PNG", new File(i+".png"));
time = System.nanoTime()-time;
total_time += time;
System.out.println((i+1)+"/"+n+" - "+"Time: "+(time/1000000L)+" ms");
} catch (Exception ex) {
Logger.getLogger(SaveImageSpeedTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
long average_time = total_time/n;
System.out.println();
System.out.println("Total time: "+(total_time/1000000L)+" ms");
System.out.println("Average time: "+(average_time/1000000L)+" ms");
}
}
这怎么可能?如果基准测试显示RAM磁盘快10倍,为什么它没有更快?我也尝试过使用C ++可执行文件保存数据,而且时间相同。
编辑1:
通过将RAM磁盘的格式从NTFS更改为FAT,我得到的速度几乎快了两倍,但应该快10倍。Edit 2:
我尝试了不同的图像尺寸,甚至制作了随机图像(以避免缓存数据)。总是相同的结果:Ram DISK几乎快两倍。我已经使用ImDisk创建了256MB的RAM磁盘,并将HDD和Ram磁盘的读取/写入速度与简单的基准测试软件CrystalDiskMark进行了比较。 CrystalDiskMark显示RAM磁盘为10 ...