3

ノードが追加されたJavaFXGroupがあり、Pathそれにデータを1秒間に約30回追加します。これにより、GUI全体が非常に遅くなり、約1分後に応答しなくなります。Groupまず、次のようにパスを追加します。

root.getChildren().add(path);

データは次のように追加されます。

while(true) {
    // Calculate x and y...

    path.getElements().add(new LineTo(x, y));
    path.getElements().add(new MoveTo(x, y));

    // Sleep 33 milliseconds...
}

グループにパスを追加せずに、後でデータを追加すると、GUIの応答性が維持されるため、パスの形状を描画するときにパフォーマンスの問題が発生するようです。なんで?パフォーマンスを向上させるために何ができますか?これが起こることが知られていますか、それとも私は何か間違ったことをしていますか?ありがとう!

4

1 に答える 1

7

JavaFX 2.1には、パスのパフォーマンスに関連する既知の問題(パスの作成が非常に遅い)と、JavaFX 2.2では未解決の別の同様の問題(パスのレンダリングパフォーマンスの向上)があります。JavaFX課題追跡システムを確認すると、他の問題が発生する可能性があります。現在開発中のJavaFX8では、多くの要素のパフォーマンスが大幅に向上しています。

別の方法として、パスではなくキャンバスを使用することもできます。ユースケースによって異なりますが、一部のユースケースではこれが適切な代替となり、他のユースケースではそうではありません。

再現可能な短いテストケースを作成し、JavaFXの問題を提出できる場合、JavaFXチームは、発生しているパフォーマンスの問題を調査し、基盤となるシステム実装が原因である場合はそれらに対処する可能性があります。

また、次のことについて実装を確認する必要があります。

  1. JavaFXスレッドでsleepを呼び出さないでください。
  2. JavaFXスレッドでプロセッサを集中的に使用することは何もしないでください。
  3. JavaFXスレッドでブロッキングI/Oを実行しないでください。
  4. SceneGraphまたはPathに数万のノードを配置しないでください。
  5. 別のスレッドからSceneGraphのオブジェクトを読み書きする場合は、Platform.runLaterを使用します。
  6. Platform.runLaterを頻繁に呼び出さないでください。そうしないと、イベント処理システムが過負荷になります。

コードに上記の問題があると言っているのではなく、確認するだけです。

于 2012-10-04T18:30:18.047 に答える