2016-01-13 18 views
7

私はJavaFXでLineChartのパフォーマンスを向上させようとしてきましたが、大成功はしていませんでした。私はまた、大きなデータを表示しようとしたときに、一部のプログラマが見いだした共通の問題であると考えていることがわかりました(ここではdatasize> 10,000)。たとえば、この種のデータは科学技術ではよくあることですが、JavaFXでLineChartを高速化する方法を理解することができれば幸いです。JavaFX LineChartの性能

まあ、私は同様の質問Performance issue with JavaFX LineChart with 65000 data pointsJavaFX LineChart - draw arrayの2つの記事をスタックオーバーフローで見つけました。トピックPerformance issue with JavaFX LineChart with 65000 data pointsは、Ramer–Douglas–Peucker algorithmを使用するための提案(Adamによる)で終了します。速度を上げるためにLineChartへのデータ点数を減らすことができます。

しかし、科学と工学のデータでは、プロットの形状を確認してから拡大して、プロットの特定の部分の詳細を確認する必要があります。したがって、Ramer-Douglas-Peuckerアルゴリズムを使用すると、ユーザーがズームイン/アウトするたびにLineChartを再描画する必要があります。

したがって、私は、JavaFXでLineChartをスピードアップする方法についていくつかのヒントがあるかどうかを知りたいと思います。これまでに学んだことのあるコードの例を示します。

​​

このコードを実行するとわかるように、レンダリングには最大のコストがかかりますが、これらのタイミングではキャプチャできませんでした。それから、私の見解では、改善はそこに焦点を当てるべきですが、私はどのように分かっていません。

ありがとうございます。

+0

レンダリングは時間がかかる部分なので、私が見たことはあなたのシナリオではうまくいくと思います。いくつかの "軽量"データ表現(例えば 'double []')でデータの縮小を行い、次に 'XYChart.Data'オブジェクトの縮小数を作成します。レンダリングが遅い理由は、線グラフの各線分がシーングラフのノードであることです。レイアウトの計算とCSSの適用が必要です。データの処理ははるかに高速になる可能性があります。もう1つの方法(私はこれをやらなければなりませんでした)は独自のグラフを(例えばキャンバスで)実装することです。 –

+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つだけ使用するか、複数のデータポイントの平均を計算します。

関連する問題