Ваше время в 9 секунд выглядит плохо - интересно, включили ли вы весь код и время только ImageIO.read(File)
?
Однако я обнаружил, что ImageIO.read(File)
довольно медленно работает на дисках без SSD (ie 500 мс до 1 секунды). При тестировании NAS и HDD на моих образах P C 4-6 МБ, называемых InputStream.read (), до 1000 раз, и это время, затраченное на загрузку, сокращается, если все изображение было считано в память до вызова ImageIO.read:
static BufferedImage load(File f) throws IOException
{
byte[] bytes = Files.readAllBytes(f.toPath());
try (InputStream is = new ByteArrayInputStream(bytes))
{
return ImageIO.read(is);
}
}
Это решение может немного замедлить время доступа на SSD-дисках (что не было проблемой для меня примерно на 20 мсек), но запас усиления на NAS / сетевом диске составил 50-250 мсек на моем P C.
Очевидно, что время, которое вы наблюдаете, будет зависеть от вашего оборудования, размера и типов файлов изображений, но, возможно, стоит попробовать в вашем конкретном случае.
Если вам нужно загрузить несколько изображений, вы можете разделите файловый ввод-вывод и вызовы ImageIO на отдельные потоки для небольшого дополнительного выигрыша, но за счет дополнительной сложности и объема памяти.