03-11-2021 11:47 PM
多量(100枚以上)の画像を読み込み、輝度値の最大値を取得するプログラムを作成したのですが、メモリ不足エラーが発生します。
タスクマネージャで確認したところ、LabVIEWのメモリ使用量が3GBになりエラーが吐き出されます(32bitのLabVIEWでは3GBが最大容量のようです:https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000PADVSA4&l=ja-JP)。
具体的な状況として、メインVIのForループ内にサブVIを設置し、サブVIの中で「PNGファイルを読み取る関数→ピックスマップを非平坦化→最大最小」によって最大値を読み取っています。
「PNGファイル読み取り・非平坦化・最大最小」を繰り返すたびにメモリ使用量が増加するので、解決したいと考えています。
最大値のみをメモリに残し、PNGファイル読み取りの出力ワイヤや非平坦化の出力配列で使用するメモリ容量をループのたびに削除したいのですが、具体的な方法を教えていただけますか。
メモリ解放要求ではメモリが解放できないようでした。
よろしくお願いいたします。
解決済! 解決策の投稿を見る。
03-14-2021 04:03 AM
user_kb さん、はじめまして
3GBの制限は、LabVIEWに限らず、64bitOS上の32bitアプリケーションでの制限になりますね。
ちなみに問題のあるVIの共有は可能でしょうか。(もしくはスクショ)
手元でそれらしいものを作ったのですが、100枚以上読み込んでもメモリ利用率は一定程度で保たれていました。(Forループを置いたメインVIから、ご提示の処理3つのみを含んだサブVIを呼び出し。メイン側では最大値のみを取得し配列に格納)
どこかで読み込んだPNGデータを保持してしまっているのかと思います。
03-15-2021 03:19 AM
回答ありがとうございます。自己解決しました。
ご指摘いただいた通り、ドライブに保存されている画像の読み込みを実装したところメモリ利用率は変わりませんでした。
どうやらデバイスで画像を取得した際にメモリが余分に使用されており、
PNG読み取りVIによりメモリ上でデータがコピーされることでますますメモリがひっ迫していたようです。
画像取得後にメモリを解放したところ無事解決しました。
回答ありがとうございました。