【问题标题】:How to improve JavaFX chart performance?如何提高 JavaFX 图表性能?
【发布时间】:2015-03-06 03:50:17
【问题描述】:

我想使用 JavaFX 可视化一个包含 10 个系列的静态图表,每个系列都有 10'000 个点。 在我的第一次测试之后,我有点担心 JavaFX 图表 API 的性能,尤其是构造函数 new XYChart.Series<>(...),它需要 3 分钟来初始化 100'000 个数据点。

如果你不相信我,运行下面的代码:

public static final int SIZE = 100000;

public static void main(String[] args) {
    List<XYChart.Data<Integer, Integer>> data = new ArrayList<>(SIZE);

    measureTime("creating list", () -> {
        for (int i=0; i<SIZE; i++) {
            data.add(new XYChart.Data<>(i, i));
        }
    });

    measureTime("creating series", () -> {
        new XYChart.Series<>(FXCollections.observableList(data));
    });
}

public static void measureTime(String msg, Runnable f) {
    long start = System.nanoTime();
    f.run();
    long end = System.nanoTime();

    System.err.println("Time for " + msg + ": " + (end - start) / 1000000 + " ms");
}

这些是我电脑上的结果:

Time for creating list: 62 ms
Time for creating series: 173555 ms

为什么这个初始化需要这么长时间?如何解决这个问题?

或者有没有办法在没有 Observables 的情况下使用 JavaFX 图表?

【问题讨论】:

  • hmmm ... 无法重现:我的输出大约是 400 毫秒/150 毫秒(jdk8u40b23,即当前版本之前的最近 ea)
  • 您的权利。这个错误似乎已在 Java 8u40 中得到修复。

标签: performance charts javafx-8


【解决方案1】:

看起来系列创建是 Java 8u25 和 Java 8u40 之间修复的性能问题。

我在 8u25 上运行了你的应用程序,得到了以下结果:

Time for creating list: 59 ms 
Time for creating series: 135896 ms

升级到8u40再次运行,得到如下结果:

Time for creating list: 66 ms
Time for creating series: 80 ms

所以,只需更新到 latest Java version 就可以了。

【讨论】:

  • 非常感谢。到目前为止,我只使用了存在这些性能问题的 Java 8u20 和 8u31。甚至不知道 8u40 已经可用。我现在用 8u40 对其进行了测试,它就像一个魅力。
  • 无论如何,JavaFX 图表的加载性能,尤其是绘制性能,即使在 Java 8 更新 66 的情况下,与 JFreeChart 相比也非常糟糕。当涉及到图表的频繁更新时,请不要使用 JavaFX 图表!
  • @Stefan 我想知道如果关闭图表的 animation,您看到的频繁更新的 JavaFX 图表性能问题是否会得到改善。尽管如此,还是会有一些图表类型更适合 JFreeChart。当您使用 JFreeChart 时,您是否通过 FXGraphics2D bridge 尝试过,以便 JFreeChart 直接呈现到 JavaFX 画布,如果是,那么在您的场景中执行是否正常?
  • @jewelsea 使用 JFreeChart 和 FXGraphics2D 桥可以更高效地呈现哪些类型的图表。我发现我只能在四核 RPi (stackoverflow.com/questions/41943662/…) 上使用 JavaFX LineChart 每秒渲染大约 1000 - 1500 点,并且关闭动画,并且正在寻找更快的解决方案。
  • 我不知道,您需要对自己感兴趣的特定图表进行基准测试。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多