ソフトウェア制御のUSRPでマイクロ秒単位の送受信制御を行う

LabVIEWでチャート表示器に表示する際のメモリ使用量 (2/2)

こんにちはドルフィンシステム福島です。

前回の投稿で、LabVIEWにはグラフ表示器に大量のデータを表示させるときにはメモリ使用量が増大するので注意が必要です、ということをお伝えしました。グラフ描画のタイミングによっては、Out Of Memory例外が発生しアプリが落ちてしまいます。

今回はチャート表示器でのメモリ使用量を調査します。

前回 LabVIEWでグラフ表示器に表示する際のメモリ使用量 (1/2)
今回 LabVIEWでチャート表示器に表示する際のメモリ使用量 (2/2)


動作確認環境

  • LabVIEW 2022 Q3 (32bit)
  • LabVIEW 2022 Q3 (64bit)


チャート表示器

まずチャート表示器ですが、グラフ表示器とチャート表示器は同じくデータをプロットするもので良く似ていますが違います。

チャートは「過去一時間の温度変化のグラフ」を刻々と表示更新するような用途に向いています。「ある瞬間のデータを表示する」ような場合はグラフを使用します。

グラフの場合は、描画するデータ全体をユーザが用意しておく必要がありましたが、チャートはデータを渡せば履歴管理はチャート内部で適当に処理してくれます。


ではチャートにデータを入れて描画させてみます。

チャートは履歴の長さを設定することが出来て、デフォルトの履歴の長さは1023ヶです。double数値なら 8バイト x 1023 = 8184バイトをチャート表示器の内部に保持してプロットします。

この履歴以上にはメモリを消費しないはずです。

ためしに100MB分のデータを入力してプロットしてみます。




実行してみたところ、メモリは全然消費しませんでした。
チャートが1023ヶ分の履歴しか確保していないので、順当な結果です。


チャート表示器の履歴を長くした場合のメモリ消費量

次に、チャートの履歴を長くしてみます。

チャート履歴を25000000にすると、チャート内部に100MBのバッファが作成されるはずです。

  • 25000000/1000/1000=25 M
  • 25M x 4バイト(I32) = 100MB

起動時のメモリ消費量が、

  • 履歴 1023→70MB程
  • 履歴 100M→300MB程
  • 増加分 200MB程

となり、起動時のメモリ消費量が増加しました。増えた分はチャート表示器が履歴用に確保したメモリと思います。

グラフの時と同じですが、プロットするデータの量の、倍量のメモリを消費するようです。

※ 起動時のメモリ消費量は変動しますが、何度か再起動し平均的なメモリ消費量が200Mだと分かりました。

グラフの時と同じようにチャートもプロットするデータの倍の容量を使用するようですね。


チャート表示器で描画した時のメモリ消費量

上記100MBデータをプロットしてみると、さらに160MB程消費しました

描画するための画像イメージを生成しているのだと思いますが、プロットするデータ量の3.6倍です。結構消費しますね。


チャート表示器のグラフをクリアする

グラフ表示器のグラフをクリアする場合は空のデータを入力することで出来ましたが、チャートではメモリは確保されたままになっていました。チャート表示器の値をデフォルトに戻すと、使用したメモリも解放されました。

空のデータを入力


デフォルトに戻すとクリアされる


まとめ

  • チャート表示器にVI起動時に履歴の長さの倍量のメ モリを消費する。
  • チャートは描画時にチャート履歴と同程度のメモリを消費する。

チャートは履歴を長くしすぎると起動時のメモリ消費量が増大するので、注意が必要ですね。


以上、ドルフィンシステム福島でした。




コメント