Java 2D ImageIO。写操作妨碍性能

Java 2D ImageIO。写操作妨碍性能,java,image,performance,2d,javax.imageio,Java,Image,Performance,2d,Javax.imageio,我维护了一个Java应用程序,它可以生成很多小部件(我之所以说小部件,是因为它可以生成PDF或PNG文件-到磁盘)。该应用程序的设计目的是生成PDF文件,后来的图像成为一种需求 我的每秒事务数(TPS)在生成映像时受到影响。基本流程是创建一个BuffereImage和Graphics2D实例。使用Graphics2D对象绘制一些文本。我拉了几个其他的图像添加到我的新图像。然后我将BuffereImage写入OutputStream 我已经深入研究了ImageIO.write()方法,认为它可能是

我维护了一个Java应用程序,它可以生成很多小部件(我之所以说小部件,是因为它可以生成PDF或PNG文件-到磁盘)。该应用程序的设计目的是生成PDF文件,后来的图像成为一种需求

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

我已经深入研究了ImageIO.write()方法,认为它可能是罪魁祸首。应用程序是RESTful的,整个事务可能需要。。。比方说500毫秒。我已将ImageIO.write()方法的时钟设置为占用至少80-90%的事务时间

ImageIO.write(image,"PNG",os);  // 420ms !!!!
我很难找到绕过ImageIO.write()的方法。。。如有任何建议,我们将不胜感激


注:图像为RGB彩色模型,最终大小约为50kb。我看到二进制颜色模型的性能更好,但颜色是一个要求

>我也看到,PNG上的IIIO慢,JPEG快,但我认为PNG对文本更好。

你可以试试。还可以维护ImageIO API,因为它可以处理多个提供程序来编写/读取图像mime类型


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

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

感谢您的回复,我不知道这些设置,将进一步研究。然而,我今天确实找到了第三方编码器来尝试。我做了一些测试,下面是我真实世界的结果。这比ImageIO更好…但我仍在寻找更好的解决方案。ImageIO-写入时间PNG:544毫秒。ImageIO-写入时间JPG:76毫秒。ImageIO-写入时间JPG:751毫秒。Oppengencoder-写入时间PNG:208毫秒。