我正在为我用Java编写的关于图像的项目运行一些测试。我得到了一个有趣的结果,无法弄清楚为什么。以下是BufferedImage
和Image
的初始化行。
File[] files = new File("C:\\Users\\SAMSUNG\\Desktop\\img\\").listFiles();
time = System.currentTimeMillis();
for (File f:files){
Image img = ImageIO.read(f);
}
System.out.println((System.currentTimeMillis() - time) + " miliseconds.");
请注意:这两项操作分别运行。我运行上面的一个,进程结束,我的意思是实际上被杀死了,而不是我运行下面的一个。
File[] files = new File("C:\\Users\\SAMSUNG\\Desktop\\img\\").listFiles();
time = System.currentTimeMillis();
for (File f:files){
BufferedImage bimg = ImageIO.read(f);
}
System.out.println((System.currentTimeMillis() - time) + " miliseconds.");
我知道在运行中运行这些可能会影响结果,因为我尝试访问相同的文件,因为我单独运行它们。结果接近40分钟。但是,BufferedImage
初始化总是比Image
初始化快一分钟。那是为什么?
我运行测试三次,结果是一样的。
答案 0 :(得分:7)
时代应该是一样的。我怀疑你的第一个循环是用文件的内容来预热一些缓存,第二个循环有更简单的时间。
尝试撤消阅读顺序:先BufferedImages
,然后Images
,然后检查会发生什么
答案 1 :(得分:0)
首先,确保你做了不止一次这样的测试(即将整个循环粘在一个循环中),其次使用System.NanoTime,因为它的方式更准确,第三,正如另一张海报建议的那样,尝试改变执行命令或独立运行(可能是最安全的方式)。