NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

画像ファイル読み込みによるメモリ不足エラーの対処方法

Solved!
Go to solution

多量(100枚以上)の画像を読み込み、輝度値の最大値を取得するプログラムを作成したのですが、メモリ不足エラーが発生します。

 

タスクマネージャで確認したところ、LabVIEWのメモリ使用量が3GBになりエラーが吐き出されます(32bitのLabVIEWでは3GBが最大容量のようです:https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000PADVSA4&l=ja-JP)。

 

具体的な状況として、メインVIのForループ内にサブVIを設置し、サブVIの中で「PNGファイルを読み取る関数→ピックスマップを非平坦化→最大最小」によって最大値を読み取っています。

「PNGファイル読み取り・非平坦化・最大最小」を繰り返すたびにメモリ使用量が増加するので、解決したいと考えています。

最大値のみをメモリに残し、PNGファイル読み取りの出力ワイヤや非平坦化の出力配列で使用するメモリ容量をループのたびに削除したいのですが、具体的な方法を教えていただけますか。

 

メモリ解放要求ではメモリが解放できないようでした。

よろしくお願いいたします。

 

0 Kudos
Message 1 of 3
(131 Views)
Solution
Accepted by topic author user_kb

user_kb さん、はじめまして

 

3GBの制限は、LabVIEWに限らず、64bitOS上の32bitアプリケーションでの制限になりますね。

ちなみに問題のあるVIの共有は可能でしょうか。(もしくはスクショ)

手元でそれらしいものを作ったのですが、100枚以上読み込んでもメモリ利用率は一定程度で保たれていました。(Forループを置いたメインVIから、ご提示の処理3つのみを含んだサブVIを呼び出し。メイン側では最大値のみを取得し配列に格納)

 

どこかで読み込んだPNGデータを保持してしまっているのかと思います。

Message 2 of 3
(70 Views)

回答ありがとうございます。自己解決しました。

 

ご指摘いただいた通り、ドライブに保存されている画像の読み込みを実装したところメモリ利用率は変わりませんでした。

どうやらデバイスで画像を取得した際にメモリが余分に使用されており、

PNG読み取りVIによりメモリ上でデータがコピーされることでますますメモリがひっ迫していたようです。

画像取得後にメモリを解放したところ無事解決しました。

 

回答ありがとうございました。

 

 

0 Kudos
Message 3 of 3
(51 Views)