JavaFX 2路径绘制性能

时间:2012-10-04 18:00:36

标签: java performance drawing javafx-2

我有一个添加了Group节点的JavaFX Path,我每秒向其添加大约30次数据。这导致我的整个GUI在大约一分钟后变得非常迟缓且无响应。 首先,我将路径添加到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仍然保持响应,因此在绘制路径的形状时似乎存在性能问题。为什么?我该怎么做才能提高性能?知道这件事发生了还是我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:6)

JavaFX 2.1中存在与路径性能相关的已知问题(creating paths is very slow)以及JavaFX 2.2中未解决的另一个类似问题(improve path rendering performance)。如果您查看JavaFX issue tracker system,可能还有其他问题。对于目前正在开发的JavaFX8,许多元素的性能都是vastly improved

您可以尝试的另一种方法是使用Canvas而不是路径。取决于你的用例,对于某些用例,这将是一个合适的替代,对于其他人则不会。

如果您可以创建一个简短的可重现测试用例并为其提交JavaFX问题,JavaFX团队将调查您遇到的任何性能问题,如果它们是由底层系统实现引起的,则可能会解决这些问题。

您还应检查以下内容的实施情况:

  1. 不要在JavaFX线程上调用sleep。
  2. 不要在JavaFX线程上执行任何处理器密集型操作。
  3. 不要在JavaFX线程上执行阻塞I / O.
  4. 不要在SceneGraph或Path中放置数万个节点。
  5. 当从另一个线程读取或写入SceneGraph中的对象时,请使用Platform.runLater
  6. 不要经常调用Platform.runLater,否则最终会导致事件处理系统过载。
  7. 不是说你的代码有任何上述问题,只是要检查的事情。