以编程方式将文件保存在ImDisk的RAM DISK中不是更快

问题描述 投票:0回答:1

我使用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 ...
java performance benchmarking ram hard-drive
1个回答
1
投票
[写入文件时,does not yet mean数据实际上已写入磁盘。操作系统通常使用缓冲区缓存将defer writes发送到设备。
© www.soinside.com 2019 - 2024. All rights reserved.