2012-12-18 79 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%的改進 - 這非常棒 - 當您只使用二進制文件時它是免費的。推薦的。