ruby – Rails算法后的内存泄漏?

发布时间:2020-09-16 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了ruby – Rails算法后的内存泄漏?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个灵感来自合并排序的合并部分的算法.

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.

总结

以上是编程之家为你收集整理的ruby – Rails算法后的内存泄漏?全部内容,希望文章能够帮你解决ruby – Rails算法后的内存泄漏?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!