2

私はたくさんのウィジェットを生成するJavaアプリケーションを維持しています(PDFまたはPNGファイルをディスクに生成するため、ウィジェットと言います)。このアプリケーションは PDF を生成するように設計されており、それ以降は画像が必要になりました。

画像の生成時に、1 秒あたりのトランザクション数 (TPS) に問題があります。基本的な流れは、BufferedImage と Graphics2D インスタンスを作成することです。Graphics2D オブジェクトを使用して、テキストを描画します。新しい画像に追加する他の画像をいくつか取り込みます。次に、BufferedImage を OutputStream に書き込みます。

ImageIO.write() メソッドが原因の可能性があることを突き止めました。アプリケーションは RESTful であり、トランザクション全体にかかる可能性があります... 500 ミリ秒としましょう。そのトランザクション時間の少なくとも 80 ~ 90% を占めるように、ImageIO.write() メソッドをクロックしました。

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

ImageIO.write() を回避する方法を見つけるのに苦労しています...どんな提案でも大歓迎です。

注: 画像は RGB ColorModel && で、約 50kb になります。バイナリ カラー モデルでパフォーマンスが向上することを確認しましたが、色は必須です。

4

2 に答える 2

1

jonwilks の ObjectPlanet の「 PngEncoder 」へのリンクをバックアップするために、テストしたところ同様の結果が得られました。ImageIO.write よりも約 30 ~ 50% 改善されています。これは非常に素晴らしいことです。バイナリのみを使用する場合は無料です。おすすめされた。

于 2013-02-06T15:41:12.663 に答える
0

私も、PNG の ImageIO は遅く、JPEG は高速であることを確認しましたが、テキストには PNG の方が適していると考えています。

JMagickを試すことができます。また、ImageIO API を維持することもできます。これは、画像の MIME タイプを読み書きするための複数のプロバイダーを処理できるためです。

私が試したことはありませんが、役立つかもしれないことの 1 つは、キャッシュ ディレクトリを高速 RAM ディスクに設定することです: ImageIO.setCacheDirectory(ramdisk)、またはsetUseCache(false).

于 2012-12-18T23:50:58.267 に答える