2016-01-13 139 views
7

我一直在尝试改善JavaFX中的LineChart的性能,但没有取得很大的成功。我也发现这似乎是一些程序员在试图显示大数据时发现的一个常见问题(这里的大数据代表数据大小> 10,000)。例如,这种数据在科学和工程中非常普遍,如果我们能够想出如何加速JavaFX中的LineChart,那将是非常好的。JavaFX LineChart性能

那么,我发现在这里的两个帖子在stackoverflow与类似的问题Performance issue with JavaFX LineChart with 65000 data pointsJavaFX LineChart - draw array。主题Performance issue with JavaFX LineChart with 65000 data points结束了(亚当)建议使用Ramer–Douglas–Peucker algorithm!以减少进入LineChart的数据点数量以加快速度。

但是,在科学和工程数据中,我们通常需要查看绘图形状,然后放大以查看绘图特定部分的细节。因此,如果我们使用Ramer-Douglas-Peucker算法,我们将需要每次用户放大/缩小时重绘LineChart,我认为这会花费大量的处理。

因此,我想知道是否有人在如何加快JavaFX中的LineChart方面有一些提示。这里是一个示例代码,其中包含了我迄今为止学到的内容。

​​

仿佛运行这段代码,你可以看到,最大的成本是渲染,这是我无法抓住使用这些时序。然后,在我看来,改善应该集中在那里,但我不知道如何。

谢谢。

+0

由于渲染是耗时的部分,我认为您看到的建议可能适用于您的场景。对某些“轻量级”数据表示(例如'double []')执行数据缩减,然后创建数量减少的“XYChart.Data”对象。渲染速度缓慢的原因是折线图中的每个线段都是场景图中的一个节点;使用它涉及CSS的布局计算和应用。处理数据可能要快得多。另一种选择(我必须这样做)是实现你自己的图表(例如用画布)。 –

+0

谢谢,我会稍后再试。现在,我想知道是否有人知道我们如何花费时间来渲染。 –

+0

有谁知道高性能折线图的实现? –

回答

0

改善具有多个数据点的图表的性能是消除数据点的“形状”。

在CSS例如:

.chart-line-symbol { 
    -fx-shape: ""; 
} 

或以确保它是完全不可见:

.chart-line-symbol { 
    -fx-background-insets: 0,0; 
    -fx-background-radius: 0px; 
    -fx-padding: 0px; 
    -fx-shape: ""; 
    -fx-background-color: transparent; 
} 

另一种方法是从图表删除一些数据点。 因此,例如只使用每3个数据点或计算多个数据点的平均值。