NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

メモリ不足の件(Hex 0x2)

解決済み
解決策を見る

お世話になります。

メモリ不足で困っております。

 

Forループを2段で組んでいます。

2段目で「この作業を完了するためにはメモリが足りません」と表示されます。

次に「(Hex 0x2) メモリがいっぱいです。」と表示されます。

 

単純に2段目だけのVIを作成し、1段目の結果を与えて実行すると正常終了します。

1段目の処理が終わったらメモリ開放する方法をとれば解決するのでしょうか?

試しに"メモリ解放要求 関数"を1段目のForループ内に入れたのですが解決しません。入れ方が悪いのかもしれません。

 

もう少し内容を書くと、

1段目で複数のWAVファイルを順次読み込んで解析、

2段目で複数のWAVを共通に加工しWAVファイル書き込みをします。

 

WAVファイルを一つだけ実行してもメモリ不足となります。

繰り返しますが、2段目だけで実行すると正常終了します。

 

どのような、メモリ開放の仕方、または初期化が必要でしょうか?

すみませんが、教えて下さい。

 

 

0 件の賞賛
メッセージ1/8
2,493件の閲覧回数

In my opinion, you don't have full control over memory release, LV will automatically release memory when it deems right.

 

Missing details,

  • Always share the VI you're talking about, we cannot guide you when we cannot see or debug the problem
    • If you cannot share the whole code, create a reproducing case using simpler code and share the conditions at which you were able to reproduce
  • What LV version, OS version, RAM size, bitness?
  • What is the size of WAV file you're processing?
  • What is the content of WAV file and what kind of analysis you perform?

Memory full as the phrase implies you have used up all your memory, we cannot say why you ended up there but a bunch of memory inefficient operations that led to the memory full or memory was very less to start with and you did not consider that while programming your application.

 

Definitely, you can workaround the limited RAM scenario by careful planning of tasks and optimize the memory usage (avoiding copies).

Santhosh
Soliton Technologies

New to the forum? Please read community guidelines and how to ask smart questions

Only two ways to appreciate someone who spent their free time to reply/answer your question - give them Kudos or mark their reply as the answer/solution.

Finding it hard to source NI hardware? Try NI Trading Post
0 件の賞賛
メッセージ2/8
2,479件の閲覧回数

ご返信、ありがとうございます。

 

VIを共有します。

処理内容は簡素化しましたが、同様な症状でメモリ不足となります。

 

wav_test1.vi  :  メモリ不足となります。

wav_test1.vi  :  2段目だけのForループで作成。正常動作。

 

1段目のForループでWAV解析して係数を出力します。

2段目のForループでWAVファイルに係数を掛けてファイル出力します。

 

WAVファイルの条件:44.1kHz / 16bit

4分程度のWAVファイルは正常終了します。

7分程度のWAVファイルでメモリ不足となります。

 

LabVIEW version : LV2018(32bit)

PC : win10(64bit)

RAM : 8G

 

メモリ対処の方法を教えて下さい。

よろしくお願いします。

すべてをダウンロード
0 件の賞賛
メッセージ3/8
2,438件の閲覧回数

デスクトップ実行ノードを使えるとよいですが、ない場合はダイアグラム無効ストラクチャを使って、

どこがメモリ不足の原因となりそうか絞っていくとよいと思います。

 

無効範囲を徐々に絞っていくことで原因個所を特定し、場所がわかれば対策を行います。

例えば入力フォルダ数がわかりませんが、大きすぎるなら分割して処理するなど。。。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ4/8
2,352件の閲覧回数

「サウンドファイル簡易読み取り」と「サウンドファイル簡易書き込み」は簡単でよいのですが、メモリを大食いします。

WAVファイルは一度に全長をメモリに乗せないで小分けして読み書きすることと、内容はたいてい整数データなので整数のまま扱うのが普通です。

 

サウンドファイル関数パレットの下段にある、開く・読み取る・書き込む・閉じるを使ってプログラミングすることを検討してください。行き詰まったらまた質問してください。

 

メッセージ5/8
2,324件の閲覧回数

J.H.Watsonさん ありがとうございます。

開く・読み取る・書き込む・閉じる を使って、より簡素化して検討しています。

VIを共有します。wav_test1-2.vi

 

wavファイル書き込み時のForループで memory is full となります。

ブロックダイアグラム内にコメントを置きました。

wav_write_forloop.PNG

 

読み込むwavファイルが長い時、このForループでの処理を分割すればよいのでしょうか?

考えてみたのですが、ここでの分割処理がわからないため教えて下さい。

または他に良い方法があるでしょうか?

 

WAVファイルの条件:44.1kHz / 16bit

5分程度のWAVファイルは正常終了します。

 

引き続き、よろしくお願いします。

 

すべてをダウンロード
0 件の賞賛
メッセージ6/8
2,303件の閲覧回数
解決策
トピック作成者mxaraiが受理

個別のVIを使うとき、「簡易読み込み」と「簡易書き込み」VIの中身をばらすとサブVIの多態性インスタンスが選べません。なので関数パレットから置いて下さい。

一度に読み込むサンプル数を指定してやることで分割処理ができます。ファイルの終わりに達したときはエラーを出さずに残りのデータを返してくれます。

サンプルVIを添付します。サブVIは「多態性セレクタ」を表示させています。

 

メッセージ7/8
2,293件の閲覧回数

J.H.Watsonさま

ご親切にありがとうございます。

 

右クリックすると、表示項目 > 多様性VIセレクタ とあり選択できることがわかりました。

長めのwavファイルを実行しても、問題なく終わることができました。

このVIを元にしっかり勉強したいと思います。

 

また、wav16bitのところで符号ビットをマイナス1するご指摘など、ありがとうございます。

さらに、日本語でのサポートをありがとうございました。

 

0 件の賞賛
メッセージ8/8
2,287件の閲覧回数