如何提高JavaFX图表性能?

时间:2015-03-05 16:37:52

标签: performance charts javafx-8

我希望使用JavaFX可视化10个系列的静态图表,每个系列都有10&#000; 000点。 在我第一次测试之后,我有点担心JavaFX图表API的性能,特别是关于构造函数new XYChart.Series<>(...),它需要3分钟的初始化才能完成100和39个数据点。

如果您不相信我,请运行以下代码:

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图表?

1 个答案:

答案 0 :(得分:4)

看起来系列创建是一个在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,你就应该好了。