【问题标题】:Java 2D ImageIO.Write hindering performanceJava 2D ImageIO.Write 阻碍性能
【发布时间】:2012-12-18 20:48:01
【问题描述】:

我维护一个 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。我已经看到二进制颜色模型的性能更好,但颜色是必需的。

【问题讨论】:

    标签: java image performance 2d javax.imageio


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我也看到,PNG 上的 ImageIO 很慢,JPEG 更快,但我认为 PNG 更适合文本。

      你可以试试JMagick。也可以维护 ImageIO API,因为它可以处理多个用于写入/读取图像 mime 类型的提供程序。

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

      【讨论】:

      • 感谢您的回复,我不知道这些设置,并将进一步调查。然而,我今天确实找到了一个第三方编码器来尝试。 objectplanet.com/pngencoder我做了一些测试,这是我的真实世界结果。哪个比 ImageIO 更好……但我仍在寻找更好的解决方案。 ImageIO - 写入时间 PNG:544 毫秒。 ImageIO - JPG 写入时间:76 毫秒。 ImageIO - 写入时间 JPG:751 毫秒。 OPPngEncoder - PNG 写入时间:208 毫秒。
      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 2018-01-07
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2013-03-31
      相关资源
      最近更新 更多