3

我有一个添加GroupPath节点的 JavaFX,我每秒向其中添加大约 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 仍然响应,所以性能问题似乎是在绘制路径的形状时。为什么?我可以做些什么来提高性能?这是已知的发生还是我做错了什么?谢谢!

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 或路径中放置数万个节点。
  5. 从另一个线程读取或写入 SceneGraph 中的对象时,请使用Platform.runLater
  6. 不要太频繁地调用 Platform.runLater,否则您最终会导致事件处理系统过载。

并不是说您的代码有任何上述问题,只是需要检查。

于 2012-10-04T18:30:18.047 回答