【发布时间】:2017-05-25 16:53:46
【问题描述】:
我写了一个算法,灵感来自合并排序的合并部分。
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 本身有关。
【问题讨论】:
-
你有输入示例吗?
-
双重否定的意义何在?
-(-arr.length/2) -
@EricDuminil 它提供一个数组
[[obj1], [obj2], [obj3]],其中对象是自定义对象 -
@sawa 不带功能的拿ceil只是个偷懒的办法。
标签: ruby algorithm memory-leaks garbage-collection