JavaFX 2 の描画性能は Swing よりも悪いと感じます。理由の 1 つは、描画方法にあると思います。たとえば、線を描画するときは、線ごとにLineオブジェクトを作成してコンテナーに追加する必要がありますが、Swing では Graphics2D を 1 回だけ取得してから、作成せずに drawLine を実行します。毎回新しいオブジェクト。では、たとえば約 3000 個のアークを描画する必要がある場合など、JavaFX 2 を使用して描画するより効率的な方法はありますか? 最高の「描画面」とは?現在、私はGroupを使用しています。ヒントをありがとう!
3 に答える
グループを使用する現在のアプローチは問題ない可能性が高く、グループ内で 3000 個のアークを描画するパフォーマンスは、アプリケーション ユーザーにとって完全に許容できるものであることがわかるでしょう。
グループを使用するための現在の代替手段は、いくつかの便利な機能を追加するレイアウト ペインを使用することですが、オーバーヘッドのレイヤーを追加します。これは、簡単に手動でレイアウトされたオブジェクトが何千もある場合には不要です。
JavaFX 2.2 の今後の直接描画インターフェース (Canvas Node と呼ばれる) とその影響についての議論については、 JavaFX メーリング リストのアーカイブを参照してください。
オブジェクトをコンテナーに貼り付けるとパフォーマンスが低下するように見えるかもしれませんが、コンテナーの実装は、必要に応じて、最新の gpu に組み込まれている高速化された保持モード レンダリング ハードウェアを利用できます。また、JavaFX アーキテクチャは内部的にダーティ エリアを追跡し、コストのかかるレンダリング操作の結果をキャッシュしてパフォーマンスを向上させることにも注意してください。したがって、コンテナーの使用自体は、即時モードの実装に依存する可能性のある直接描画インターフェイスよりもパフォーマンスが低下することを意味するものではありません。
描画面の選択は、アプリケーションによって異なります。ほとんどの JavaFX アプリにとって最適なサーフェスは、キャンバス ノードではなく、シーングラフ ノードのコレクションです。単一のキャンバス ノードではなく、シーングラフで多くのノードを使用すると、(通常) 開発が容易になり、パフォーマンスは完全に許容されます。
最終的には、Canvas と多くのシーングラフ オブジェクトのパフォーマンスを比較するために、多くのブログ記事が書かれる可能性が高く、おそらく html canvas、java2d、swing などの他のフレームワークと比較することになるでしょう。 .
関連している
Osvaldo's JavaFX performance analysisは古いものですが、質問で提起されたいくつかの問題についての詳細な議論も含まれています。
openjfx wikiには、パフォーマンスのヒントとコツに関するすばらしいセクションがあります。
関連する StackOverflow JavaFX パフォーマンスに関する質問がいくつかあります。
JavaFX 2.2では、多くのprimitevを描画する必要がある場合に理想的に適合する、同様のオブジェクトHTML5 Canvas
が追加される予定です。
詳細については、次の号に添付されているドキュメントを参照してください:http: //javafx-jira.kenai.com/browse/RT-17407
ヒントについては、 Pixel Graphics実験の投稿を参照してください。2 つのアプローチがあり、最初のアプローチと別のアプローチが使用されます。自分で試したことはありませんが、著者は、アプローチの方が高速で、視覚化が優れていると述べています。一方、非推奨の API メソッドを使用しています。Group
ImageView
ImageView