TS工房 -技術者と研究者とモノづくり-

音楽や芸術のスタジオやアトリエの様な雰囲気の工房で、研究者として・技術者として”ものづくり”をしたい

MENU

【LabVIEW】大容量バイナリファイルを読み込んだらメモリがいっぱいですエラーが解決できた

少し前に、「【LabVIEW】大容量バイナリファイルを読み込んだらメモリがいっぱいですエラー」ということを書きましたが、無事に解決することができました。

 

前回も書いていますが、エラーの内容を振り返ってみると、大容量バイナリファイルからのデータ読み出しにおいて、一度に全てのデータをごそっと読み出しをしていたがために、1GBの連続メモリを要求していたというものです。下図がエラーを起こしていたプログラム。

f:id:wannavi:20210112235727p:plain

モリーエラープログラム

 

 

大容量ファイルの読み取り部分を、生産者・消費者デザインパターンを使って、一定数毎に読み込んでいく方法をとりました。前回の「【LabVIEW】生産者・消費者デザインパターンだけは知っておくべき」は、今日の布石でした。

 

下図が変更後のプログラム。これ自体は生産者・消費者デザインパターンではありませんのでご注意を。

f:id:wannavi:20210130142001p:plain

変更後のプログラムの一部(全部は都合により掲載できません)

簡単にファイル読み取りのところを。

初期バージョンは「バイナリファイルから読み取る関数」のみでしたが、これを「ファイル位置を設定関数」とForループを使って、4096個ずつ読んでいくようにしました。ファイル位置をどこまで読んだかはシフトレジスタを使ってループの間保持させておきます。バイナリファイル内のデータタイプ(1byteなのか2byteデータなのか)によってファイル位置は異なりますので注意してください。あと僕の技術が足りていないところにError処理があるのですが、EOF(End Of File)に到達したときにとりあえずLoop終了にさせています。Error処理の勉強をした方が良いなと思いながら、ひとまず問題が解決できてほっとしています。よかったーーーー(*^^*)