JavaFX 2路径绘制性能

lao*_*ylu 3 java performance drawing javafx-2

我有一个添加GroupPathNode 的JavaFX ,我每秒向其添加大约30次数据.这导致我的整个GUI 在大约一分钟后变得非常迟钝且没有响应.首先,我添加这样的路径Group:

root.getChildren().add(path);
Run Code Online (Sandbox Code Playgroud)

数据添加如下:

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

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

    // Sleep 33 milliseconds...
}
Run Code Online (Sandbox Code Playgroud)

如果我没有添加组的路径,但之后仍然添加数据,GUI仍然保持响应,因此在绘制路径的形状时似乎存在性能问题.为什么?我该怎么做才能提高性能?知道这件事发生了还是我做错了什么?谢谢!

jew*_*sea 6

JavaFX 2.1中与路径性能相关的已知问题(创建路径非常慢)以及JavaFX 2.2中未解决的另一个类似问题(改善路径渲染性能).如果您检查JavaFX问题跟踪系统,可能还有其他问题.对于目前正在开发的JavaFX8,许多元素的性能得到了极大的改进.

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

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

您还应该检查以下内容的实现:

  1. 不要在JavaFX线程上调用sleep.
  2. 不要在JavaFX线程上执行任何处理器密集型操作.
  3. 不要在JavaFX线程上执行阻塞I/O.
  4. 不要在SceneGraph或Path中放置数万个节点.
  5. 从另一个线程读取或编写SceneGraph中的对象时,请使用Platform.runLater.
  6. 不要经常调用Platform.runLater,否则最终会超载事件处理系统.

不是说你的代码有任何上述问题,只是要检查的事情.