ruby – Rails算法后的内存泄漏?
发布时间:2020-12-17 01:57:10 所属栏目:百科 来源:网络整理
导读:我写了一个灵感来自合并排序的合并部分的算法. def self.merge(arr) if arr.length == 1 return arr end groups = [] (0...-(-arr.length/2)).each do |i| groups [] if !arr[2*i+1].nil? arr[2*i].each do |cal1| arr[2*i+1].each do |cal2| mergecal = fun
我写了一个灵感来自合并排序的合并部分的算法.
def self.merge(arr) if arr.length == 1 return arr end groups = [] (0...-(-arr.length/2)).each do |i| groups << [] if !arr[2*i+1].nil? arr[2*i].each do |cal1| arr[2*i+1].each do |cal2| mergecal = func(cal1,cal2) if mergecal groups[i] << mergecal else mergecal = nil end end end else groups[i] = arr[2*i] end end arr = nil return merge(groups) end 呈现使用此算法的页面后,任务管理器报告大约500MB的RAM使用率.然后通过再次刷新同一页面,内存使用量现已达到1GB.我尝试在函数调用之后将GC.start(full_mark:true)添加到控制器,但似乎没有任何改变.我不确定内存泄漏是否必须使用我的代码或Ruby本身进行编码. 解决方法
Ruby垃圾回收不会立即减少ruby程序分配的内存量.内存分配很昂贵,因此即使你创建的对象被GC立即收集,内存也会慢慢释放回操作系统.如果您认为此函数存在内存泄漏,则应尝试在非rails过程中运行它,在此过程中您可以更好地控制对象生命周期.您可以使用
GC.stat获取有关运行GC之前和之后的实时和空闲对象数的信息.同样值得一读的是rubyGC如何工作我喜欢
this article.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |