2012-05-08 11 views
7

JavaFX 2の描画性能がSwingの描画性能より悪いと感じます。理由の1つは、あなたが物を描く方法です。 Lineを描画するときには、各行にLineオブジェクトを作成し、それをいくつかのコンテナに追加する必要があります。SwingではGraphics2Dを1回取得した後、毎回新しいオブジェクトを作成せずにdrawLineを行います。ですから、JavaFX 2を使って描画する方法はこれ以上ありません。もしあなたが約3000の円弧を描く必要があれば?最高の「面を描く」とは何ですか?現在、Groupを使用しています。ヒントありがとう!JavaFX 2描画性能

答えて

14

グループを使用するあなたの現在のアプローチはうまくいきます。グループ内の描画3000のアークのパフォーマンスは、アプリケーションユーザにとってはまったく受け入れられるでしょう。

現在のところ、グループを使用する代わりに、便利な機能を追加するレイアウトペインを使用することもできますが、何千もの手作業でレイアウトしやすいオブジェクトがある場合は不要なオーバーヘッドレイヤーを追加する必要があります。

JavaFX 2.2の今後のダイレクト描画インタフェース(Canvas Nodeと呼ばれる)とその意味については、JavaFX mailing list archiveを参照してください。

コンテナにオブジェクトを貼り付けるのはパフォーマンスが低下するように見えるかもしれませんが、コンテナの実装では、最新のGPUに組み込まれた高速化された保持モードレンダリングハードウェアを利用できます。また、JavaFXアーキテクチャは内部的にダーティ領域を追跡し、高価なレンダリング操作の結果をキャッシュしてパフォーマンスを向上させることにも注意してください。したがって、コンテナの使用は、直接モード実装に依存する直接描画インタフェースよりもパフォーマンスが低いことを意味するものではありません。

描画面の選択はアプリケーションによって異なります。ほとんどのJavaFXアプリケーションで最も優れたサーフェスは、キャンバスノードではなく、シーングラフノードの集合です。単一のCanvasノードではなく、シーングラフ内の多くのノードを使用することは(通常)開発が容易になり、パフォーマンスは完全に受け入れられます。

最終的に、キャンバスと多くのシーングラフオブジェクトのパフォーマンスを比較し、おそらくhtmlキャンバス、java2d、スイングなどの他のフレームワークと比較するために多数のブログ記事が書かれている可能性があります。そのような質問に答える。

関連

オスバルドのJavaFX performance analysisは、古いものの、また、あなたの質問に提起された問題のいくつかの深さでの議論を含んでいます。

Performance Tips and Tricksにいいセクションがあります。

いくつかの関連StackOverflowのJavaFXの性能に関する質問があります:JavaFXの2.2では

+0

このような詳細情報をありがとうございました! –

2

HTML5 Canvasに似たオブジェクトは、理想的にはあなたが必要に収まるが追加される予定ですprimitevsをたくさん描く。http://javafx-jira.kenai.com/browse/RT-17407

+0

リンクをありがとう、私はそれがリリースされるときに、それがどのように良いパフォーマンスを発揮するのか興味があります:-) –

1

ヒントためPixel Graphics実験のポストを見て:

詳細は次号に添付のドキュメントを参照してください。第1の方法ではGroupを使用し、別の方法ではImageViewを使用する2つの方法があります。私自身はそれを試しませんでしたが、著者はImageViewの方がより速く、視覚化が優れていると言います。一方、非推奨のAPIメソッドを使用します。