我维护一个生成大量小部件的 Java 应用程序(我说小部件是因为它会生成 PDF 或 PNG 文件 - 到磁盘)。该应用程序旨在生成 PDF,后来图像成为必需。
我的每秒交易量 (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。我已经看到二进制颜色模型的性能更好,但颜色是必需的。
最佳答案
只是为了备份 jonwilks 到 ObjectPlanet 的“PngEncoder”的链接——我们对其进行了测试并得到了类似的结果,比 ImageIO.write 提高了大约 30-50%,这非常棒——而且当你只使用二进制文件时它是免费的.推荐。
关于Java 2D ImageIO.Write 阻碍性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13941243/