拼音文件 IO - 无法分配内存



下面是将记录插入设备数据库的方法。我遇到"无法分配内存"错误的问题。

它运行在内存非常有限的Windows Mobile设备上。

有 10 个

模型,其中一个相当大,有 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

IO#readlines返回一个数组,即它读取整个文件并返回所有行的列表。在完全完成迭代该列表之前,不能对任何行进行垃圾回收。

由于一次只需要一行,因此应改用IO#each_line。这将一次只读取一点点,并逐行传递。完成一行后,可以在处理文件的其余部分时对其进行垃圾回收。

最后,请注意,Ruby 捆绑了一个很好的 CSV 库,如果可以的话,您可能希望使用它而不是自己滚动。

相关内容

  • 没有找到相关文章

最新更新