2012-12-18 56 views
2

我维护一个Java应用程序,该应用程序生成很多小部件(我说小部件是因为它会生成PDF或PNG文件 - 到磁盘)。该应用程序旨在生成PDF的和后来的图像成为一个要求。Java 2D ImageIO.Write阻碍性能

我的每秒事务数(TPS)在生成映像时受到影响。基本流程是我创建一个BufferedImage和Graphics2D实例。使用Graphics2D对象绘制一些文本。我拉入一些其他图像以添加到我的新图像。然后我将BufferedImage写入OutputStream。

我已经磨练了ImageIO.write()方法作为一个可能的罪魁祸首。该应用程序是RESTful和整个交易可以采取...让说500毫秒。我使用ImageIO.write()方法占用了至少80-90%的交易时间。

ImageIO.write(image,"PNG",os); // 420ms !!!! 

我有一个困难的时候找到解决ImageIO.write()...任何建议表示赞赏。

注:图像是RGB ColorModel & &最终大约50kb。我用Binary颜色模型已经看到了更好的性能,但颜色是一个要求。

回答

0

我也看到了,PNG上的ImageIO速度较慢,JPEG速度更快,但我认为PNG更适合文本。您可以试试JMagick。也可以维护ImageIO API,因为它可以处理多个提供者来编写/读取图像MIME类型。

有一件事我没有尝试,但可能有帮助,将缓存目录设置为快速RAM磁盘:ImageIO.setCacheDirectory(ramdisk)setUseCache(false)

+2

感谢您的回应,我不知道这些设置,并会进一步研究。然而,我确实找到了今天尝试的第三方编码器。 http://objectplanet.com/pngencoder/ 我已经做了一些测试,这里是我的真实世界的结果。哪个比ImageIO好......但我仍在寻找更好的解决方案。 ImageIO - 写入时间PNG:544毫秒。 ImageIO - 写时间JPG:76毫秒。 ImageIO - 写时间JPG:751毫秒。 OPPngEncoder - 写入时间PNG:208毫秒。 – jonwilks

0

为了备份jonwilks与ObjectPlanet的“PngEncoder”的链接 - 我们对它进行了测试并得到了类似的结果,与ImageIO.write相比,大概有30-50%的改进 - 这非常棒 - 当您只使用二进制文件时它是免费的。推荐的。