12-19-2013 07:38 PM
お世話になります。
現在csvファイルに格納されたデータを読み出しアナログ出力を行っています。
データ数が3×300万程度のデータであれば問題なく出力できているのですが
さらに大量のデータになると”この作業を完了するためにはメモリが足りません”
”LabVIEW:メモリが一杯です”と表示されてしまいます。
現在の使用環境はLabVIEW8.6、windoswXP32bit版(3Gスイッチ解除済み)です。
この現象はwindowsを64bit版に変更すれば解消できるでしょうか?
もしくは他に対策があるものでしょうか?
以上お手数ですがよろしくお願いします
解決済! 解決策の投稿を見る。
12-19-2013 10:19 PM
はじめまして、とも0803さん
利用可能なメモリの上限増による対処
まず、LabVIEWで扱えるメモリについては下記が参考になると思います。
32ビット及び64ビット版LabVIEWが扱える最大メモリサイズについて
http://digital.ni.com/public.nsf/allkb/F916B75FB2AA077A86256C1400358C17
Windowsが32bitでLabVIEWが32bit版であれば最大3GB
Windowsが64bitでLabVIEWが32bit版であればデフォルトで最大4GB
とありますので、1GB使用可能な領域を増やす事ができます。
OS、LabVIEW共に64bitにすればMAX8TBで現実的に考えると
無制限と言っても良い状態になります。
但し64bit版のLabVIEWは日本語化されていません。
32 ビットおよび 64 ビットバージョン LabVIEW についての FAQ
http://digital.ni.com/public.nsf/allkb/CD1524A323504D198625761B002C6D95
※上記は対象バージョンが2009なので最新版では一部異なるかもしれません。
とりあえずはOSを64bit化することで症状は収まるとは思いますが、
メモリを大量に使う構造というのは良い状態とは言えませんので
プログラミングでの対処も検討されることをオススメします。
プログラミングによる対処
現状のVIが一括でファイル全体を読み出している前提ですが、
以下、変更の小さいと思われる順の対処案です。
1. CSVからバイナリに変換したファイルを用意し、テキストの読み出し処理をバイナリファイルの一括読み出しに置き換える
(バイナリのほうがメモリが少なくて済むだけの話で根本解決ではない)
2. ファイルの読み出しを細切れに行う構造に変更
案2-1 読み出し→DAQのバッファへの書き込み の反復処理とする
案2-2 読み出し処理とバッファ書き込み処理を並列ループ化し、ループ間でキューを使ってデータを受け渡す (生産者消費者デザインパターン)
12-19-2013 10:49 PM
w_kt様
ご回答ありがとうございます。
ご指摘の通り一括でデータを扱うのは好ましいことではないですね。
今後使用するデータが増加する可能性が高いので案2-2をベースに検討したいと思います。
OSはxpではなくvistaの間違いでした。
ちょうどPCの調子もあまりよくないので64bit化しようとしていたタイミングでしたのでご提示して頂いたページも役に立ちます。
貴重な情報・ご指摘ありがとうございました