【发布时间】: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