2016-01-13 74 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個數據點或計算多個數據點的平均值。