JavaFX 2路径绘制性能

标签 java performance drawing javafx-2

我有一个 JavaFX Group 添加了一个 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 仍保持响应,因此性能问题似乎是在绘制路径的形状时。为什么?我可以做些什么来提高性能?这是已知会发生还是我做错了什么? 谢谢!

最佳答案

JavaFX 2.1 中存在一个与路径性能相关的已知问题 (creating paths is very slow),而 JavaFX 2.2 中存在另一个 Unresolved 类似问题 (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,否则最终会使事件处理系统过载。

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

关于JavaFX 2路径绘制性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733051/

相关文章:

java - 是否有用于 IntelliJ IDEA 的 GWT UI 设计器?

JavaScript style.display ="none"或 jQuery .hide() 效率更高?

iphone - CAShapeLayer 绘制路径奇怪

java - 设置大小后 JLabel.setText() 不起作用

java - 如何解决此缓冲区问题?

java - 什么是 '@CalledByNative(".. .")' ?

c++ - 从 C++ 文件中快速读取特定单词

如果使用声明参数,则像 sql 一样查询速度慢,如果不使用则查询速度快

c# - 如何在单击按钮时绘制矩形?

javascript - 在 javascript/typescript 中绘制形状并填充颜色