以下は、デバイス データベースにレコードを挿入するメソッドです。「メモリの割り当てに失敗しました」というエラーが発生するという問題があります。
メモリが非常に限られている Windows Mobile デバイスで実行されています。
10 個のモデルがあり、そのうちの 1 つは 108,000 レコードというかなり大きなモデルです。
この行 (f.readlines().each do |line|) を実行するとエラーが発生しますが、最大のモデルが既に挿入された後に発生します。
行を反復しているブロックによってメモリが解放されていませんか? それとも何か他のことが起こっていますか?
この問題に関する助けをいただければ幸いです。
def insertRecordsIntoRhom(models)
updateAmount = 45 / models.length
GC.enable
models.each_with_index do |model,i|
csvColumns = Array.new
db = ::Rho::RHO.get_src_db(model)
db.start_transaction
begin
j=0
f = File.new("#{model}.csv")
f.readlines().each do |line|
#extract columns from header line of csv
if j==0
csvColumns = getCsvFieldFromHeader(line)
j+=1
next
end
eval(models[i] + ".create(#{csvPutIntoHash(line,csvColumns)})")
end
f.close
db.commit
rescue
db.rollback
end
end
end