MATLAB Answers

plotの内容を更新する方法

4 views (last 30 days)
koji fukumoto
koji fukumoto on 31 Aug 2020
Edited: michio on 11 Oct 2020
お世話になります。
plot関数でグラフ上(Axesオブジェクト上)に複数の点を描画し、
plot関数の戻り値のオブジェクトに対してset関数を用いて点の位置('XData'及び'YData')を更新するプログラムを作成しましたが、
起動後、しばらくするとタスクマネージャ上のメモリ使用量が増加していきます。
基本的な質問で申し訳ありませんが、plot関数で描画した点の位置を変える方法として、上記実装は適切でしょうか?
(適切でない為、メモリリーク?が発生しているのではないかと考えております)
※本来ならサンプルコードを提示すべきところですが、提示できる形に整形するのに時間が掛かる為、取り急ぎ上記のような質問をさせて頂きました。
よろしくお願い致します。

  0 Comments

Sign in to comment.

Answers (1)

michio
michio on 1 Sep 2020
> plot関数の戻り値のオブジェクトに対してset関数を用いて点の位置('XData'及び'YData')
R2014b 以降は set を使わず h.XData = [] という風に(h が戻り値のオブジェクト)プロパティを変える方法がオススメではありますが、描画後の点の位置を変える方法としてはスタンダードで適切な方法であると思います。メモリ使用量が増加する直接の原因とは考えにくいと思いますが、、他に何か要因があるのかもしれません。

  21 Comments

koji fukumoto
koji fukumoto on 2 Oct 2020
2020bをインストールして、提示してくださったコードを実行してみました。
たしかに、ハンドル数の増加は見られませんでしたが、使用メモリは増加していっております。
以上、取り急ぎ情報展開まで。
>R2019b にて pause(0.01) にすることでハンドル数の増加が確認できております。ありがとうございます。社内で確認を取っておりますので、ハンドル数の増加との関係について分かり次第ご連絡いたします。
引き続き、上記の確認結果のご連絡をお待ちしております。
よろしくお願い致します。
koji fukumoto
koji fukumoto on 9 Oct 2020
michio様、
>R2019b にて pause(0.01) にすることでハンドル数の増加が確認できております。ありがとうございます。社内で確認を取っておりますので、ハンドル数の増加との関係について分かり次第ご連絡いたします
上記、どのような状況でしょうか?
お手数ですがご返信の程よろしくお願い致します。
MATLAB Answers ではなく、正式にサービスリクエストを作成した方がよい場合はその旨ご連絡ください。
よろしくお願い致します。
michio
michio on 11 Oct 2020
お待たせしており申し訳ございません。
Task Manager 上のハンドル (MS Windows GDI Handles) 数の MATLAB 側の処理内容に対応する内容については確認ができておりませんが、開発サイドのひとまずの見解としては
pause(0.01) is attempting to queue 100 frames per second and the machine is not drawing 100 frames per second, so there is a backlog of frames that appears as a memory leak.
とのことで、PC が処理できる以上の描画命令が溜まりメモリ使用量増加に表れている。すなわち単純に pause(0.01) で指定したレートでグラフ描画ができていないという
ことになりますが、この点については現象と合致しますでしょうか?
今回フレーム抜けが発生するために pause で UDP 受信の処理に合わせているとのこと。
描画処理が間に合っていないという点について、例えばフレーム抜けを許容しながら処理を追いつかせるのであれば
drawnow limitrate
の使用がお勧めです。ただ、UDP 受信処理側の事情もあると想像します。
描画処理を高速化する・・という選択肢に関して、現時点でソフト側でできることで思いつくのは描画データ点数を減らすか、マーカー '.' の使用(最も単純で速いという話を聞いたことがあります)でしょうか・・。
いかがでしょうか?

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!