Ruby on rails 为什么Rails 4保持内存使用率?
我有一个获取150000条以上记录的代码:Ruby on rails 为什么Rails 4保持内存使用率?,ruby-on-rails,ruby,memory,memory-management,Ruby On Rails,Ruby,Memory,Memory Management,我有一个获取150000条以上记录的代码: meter_data = MeterData.find_by_sql("SELECT tenant, meter_id, SUM(van) as van, SUM(vbn) as vbn, SUM(vcn) as vcn, SUM(ia) as ia, SUM(ib) as ib, SUM(ic) as ic,
meter_data = MeterData.find_by_sql("SELECT tenant, meter_id, SUM(van) as van, SUM(vbn) as vbn,
SUM(vcn) as vcn, SUM(ia) as ia, SUM(ib) as ib, SUM(ic) as ic,
SUM(w3pht) as w3pht, SUM(pf3pht) as pf3pht, SUM(f) as f,
SUM(whrec) as whrec, SUM(whtot) as whtot, SUM(varhrec) as varhrec,
SUM(varhtot) as varhtot, SUM(whintvlrec) as whintvlrec,
SUM(whintvldel) as whintvldel, SUM(w__phavg) as w__phavg,
SUM(var__3phavg) as var__3phavg, SUM(w_3phavg) as w_3phavg,
SUM(var_3phavg) as var_3phavg, SUM(phai) as phai, SUM(phbi) as phbi,
SUM(phci) as phci, SUM(w__3phmaxavgdmd) as w__3phmaxavgdmd,
MAX(w__3phmaxavgdmd) as w__3phmaxavgdmd_max, SUM(var__3phmaxavgdmd) as var__3phmaxavgdmd,
SUM(w_3phmaxavgdmd) as w_3phmaxavgdmd, SUM(var_3phmaxavgdmd) as var_3phmaxavgdmd,
date_time FROM `meter_data` WHERE (`date_time_i` >= #{@from_date} AND `date_time_i` <= #{@to_date}
AND building = '#{@building_info}') GROUP by tenant, meter_id, date_time
ORDER BY `meter_data`.`date_time_i` ASC")
raise 0
这个使用量大约为750MB,最后我用零来提高
问题是rails为什么不释放内存
Rails在执行ctrl+C之前保持750MB的内存使用量。Rails是Ruby,RubyMRI是一个带有垃圾收集器的解释器。GC将自动为您管理内存。有一些命令可以显式地调用GC,但是如果您需要这种级别的内存管理,您可能还需要探索一些支持这种行为的其他语言。我在不使用ORM now的情况下节省了50%以上的内存,代码使用250 MB!!但Rails仍能保持250 MB的内存使用率。。当进程完成时,它应该是免费的。。我用纯Ruby代码进行了测试。。它工作良好,并在处理完成后释放内存。