2

我正在为我用 Java 编写的项目运行一些关于图像的测试。我得到了一个有趣的结果,但不知道为什么。这是 和 的初始化BufferedImageImage

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初始化快一分钟。这是为什么?

我运行了 3 次测试,结果是一样的。

4

2 回答 2

7

时间应该相同。我怀疑您的第一个循环正在使用文件内容预热一些缓存,而第二个循环更容易处理。

尝试颠倒阅读顺序:首先BufferedImages,然后Images,然后检查会发生什么

于 2013-04-26T10:17:58.847 回答
0

首先,确保你做不止一次这样的测试(即把整个循环放在一个循环中),其次使用 System.NanoTime 因为它更准确,第三,正如另一张海报所建议的那样,尝试改变执行顺序或单独跑步(可能是最安全的方式)。

于 2013-04-26T10:20:39.733 回答