4

私の最初の質問=)。私はJavaFxで書かれたユーザーインターフェースでビデオゲームを書いています。動作は正しいですが、パフォーマンスに問題があります。私は、アプリの速度を低下させている更新をキューに入れているものを把握する方法を理解しようとしています。

六角形のマップを表す比較的複雑なシーングラフがあります。マップに100個または1000個の六角形を含めることができるようにスケーリングされます。六角形の数が増えると、GUIの応答性が低下します。YourKit(Javaプロファイラー)を使用して、これらの遅延を主要な再描画操作まで追跡しました。

私は夜のほとんどを、2つのことを行う方法を理解し、1つのことを理解しようとして過ごしました。

1)CustomNodeに、ペイントされるたびにコンソールに何かを出力させます。これは、これらの塗料がいつキューに入れられているかを正確に特定するのに役立ちます。

2)CustomNodeが再描画キューに配置されるタイミングを特定します。

1と2に答えると、これらすべての異なるノードをバインドしているのは何かを理解できるかもしれません。JavaFXがグローバルリフレッシュ(疑わしい)を通じてのみ機能する可能性はありますか?

4

3 に答える 3

3

JavaFXスクリプトは強力なUI言語ですが、特定の方法ではパフォーマンスが低下します。最高のパフォーマンスは、一般的に次のように要約されます。

  • シーングラフを小さく保つ

  • バインドの使用を最小限に抑えます(代わりに、よりパフォーマンスの高いトリガーを使用することを検討できます)

Jim Weaverによるこのブログ投稿は、これらの点を拡張しています。

あなたの質問に対する具体的な答えはわかりません。1.2.1のドキュメントを調べると、ノードのドキュメントでprintlnステートメントをオーバーライドして追加できるポイントを見つけることができるかもしれませんが、それができるかどうかはわかりません。forums.sun.comに投稿してみてください

于 2009-09-09T09:03:28.883 に答える
1

これは部分的な投稿です。もう少し作業を終えたら、拡張する予定です。今までやってきたことを入れたかったので、忘れないでください。

JavaFx1.2ソースを完全に補完してIDEを実行する必要があることに気づきました。これにより、コアコードにブレークポイントを設定して、何が起こっているのかを把握できます。リモートデバッグのために、Eclipseでこの構成を行うことにしました。私はNetbeansでFXを開発していますが、Eclipseに慣れているので、可能であればそれをデバッグしたいと思います。

この情報をEclipseに取り込むために、私は最初に、コードが使用するJavaソースを使用してプロジェクトを作成しました。次に、外部のJarをプロジェクトに追加しました。私のMacでは、リンクしたJarは/Library/Frameworks/JavaFX.framework/Versions/1.2にありました。

それから私はこれらの瓶にリンクするためにソースを探しに行きました。残念ながら、ご利用いただけません。その一部は/Library/Frameworks/JavaFX.framework/Versions/1.2/src.zipにあります。

調査を行ったところ、残っている唯一のオプションはJavaDecompilierをインストールすることでした。Eclipse 3.4にインストールするのが簡単だったので、これを使用しました。http Colon_ // java dot decompiler _dot free.fr/(<-psudoリンクを許してください、私は新しいので制限されています)

これが私が今いるところです。Core FXクラスに移動して、ブレークポイントを設定して実際の分析を開始できると信じています。進行中にこの投稿を更新します。

便利なベンチマークツールを見つけました:

JVM引数を使用して実行する場合:

-Djava.util.logging.config.file = / path / to / logging / file / logging.properties

そして、そのargによって参照されるファイルに次のargを配置しました。

ハンドラー=java.util.logging.ConsoleHandlerjava.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter com.sun.scenario.animation.fps.level = ALL

1秒あたりのフレーム数を含むコンソール出力が表示されます。FX 1.2の場合は機能していませんでしたが、1.2.1(2009年9月9日リリース)では機能しているようです。1.2.1を実行するNetbeansはまだありません。

于 2009-09-15T00:45:21.983 に答える
1

この記事を読むことをお勧めします。

http://fxexperience.com/2009/09/performance-improving-insertion-times/

基本的に、シーングラフへの挿入は遅く、挿入をバッチ処理することで利点を確認できます。

于 2009-09-18T01:27:31.457 に答える