2
RaspianのLineChart - Raspberry Piの通常の応答よりも遅いです。私はオシロスコープをコーディングしており、2シリーズの500ポイント(合計1000ポイント)を連続的に再描画しています。アニメーションがオフです。データ収集は実行可能です(2ms未満)。現在のデータ再描画時間は800ms程度です。必要な再描画時間は少なくとも100msです。以下にコードスニペットを示します。どのようなラズベリーパイの実行javafxグラフの表示のためのベストプラクティスですか?私は間違ったアプローチをしていますか?私は2つの線を連続的に再描画するために別の種類のチャートを使うべきですか?LineChart JavaFXの性能
プラットフォーム:
- ラズベリーパイV 3
- OS:。Raspianリリース8(ジェシー)
- Javaバージョン:
- Javaのバージョン "1.8.0_65"
- Java(TM)SEランタイム環境(ビルド1.8.0_65-b17)
- は、Java HotSpot(TM)クライアントVM
- JavaFXのバージョン(25.65-B01、混合モードを構築する):armv6hf-SDK 8.0.102(ビルドB00)
- メモリスプリット:512メガバイトグラフィックス、512メガバイトシステム
- ビデオ:HDMI
- のSoC:BroadcomのBCM2837
- CPU:4×ARMのCortex-A53、1.2GHzの
表示コード
@FXML
LineChart oscilloscope;
//indicates that the previous data has been displayed
//and that the latest data should now be displayed
//didn't bother to synchronize
boolean needsUpdating = true;
protected void startDisplay() {
oscilloscope.setAnimated(false);
oscilloscope.setCreateSymbols(false);
oscilloscope.getXAxis().setLabel("Time (ms)");
oscilloscope.getXAxis().setAutoRanging(false);
oscilloscope.getYAxis().setLabel("Volts (v)");
oscilloscope.getYAxis().setAutoRanging(false);
new Thread() {
public void run() {
while (!done) {
XYChart.Series ch1 = getChan1Data();
XYChart.Series ch2 = getChan2Data();
ch1.setName("Channel 1");
ch2.setName("Channel 2");
if (needsUpdated) {
needsUpdated = false;
Platform.runLater(new Runnable() {
@Override
public void run() {
//performance is the same whether I use this or
//oscilloscope.getData().clear()
oscilloscope.setData(FXCollections.observableArrayList());
oscilloscope.getData().addAll(ch1, ch2);
needsUpdating = true;
} //end run()
} //end Platform.runLater()
} //end if(needsUpdating)
} //end while(!done)
}.start(); //end new Thread
} //end startDisplay()
注:ItachiUchihaの回答と違って、http://stackoverflow.com/questions/22089022/line-chart-live-updateでは、データを追加するのではなく、すべてのデータを置き換える必要があります。 –
ここでJewelseaの一般的なjavafxソリューションを確認しました:https://gist.github.com/jewelsea –
更新:FX統合でJFreeChart LineChartを使って試しました。これは遅く表示されます。 –