加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby 1.9 GarbageCollector,GC.disable / enab

发布时间:2020-12-16 19:12:39 所属栏目:百科 来源:网络整理
导读:我正在开发一个Rails 2.3,Ruby 1.9.1 webapplication,它在每个请求之前进行了大量的计算.对于每个请求,它必须计算具有300个节点和~1000个边的图.图形及其所有节点,边和其他对象都为每个请求(~2000个对象)初始化 – 实际上它们是使用Marshal.load(Marshal.dum
我正在开发一个Rails 2.3,Ruby 1.9.1 webapplication,它在每个请求之前进行了大量的计算.对于每个请求,它必须计算具有300个节点和~1000个边的图.图形及其所有节点,边和其他对象都为每个请求(~2000个对象)初始化 – 实际上它们是使用Marshal.load(Marshal.dump())从未计算的缓存图中克隆的.

性能在这里是一个很大的问题.现在整个请求平均需要150毫秒.然后我看到在请求期间,部分计算随机需要更长时间.假设这可能是GarbageCollector,我将请求包装在GC.disable和GC.enable中,以便请求等待垃圾收集,直到计算和渲染完成.

def query
  GC.disable
  calculate
  respond_to do |format| format.html {render} end
  GC.enable
end

现在平均请求大约需要100毫秒(减少50毫秒).

但我不确定这是一个好的/稳定的解决方案,我认为必须有这样的缺点.有没有人遇到过类似问题或看到上述代码有问题?

解决方法

如果它使您的应用程序更快,那么使用它.

我将添加一个ensure语句,以便在引发任何异常时,您不会以禁用垃圾回收结束.

def query
  GC.disable
  calculate
  respond_to do |format| format.html {render} end
ensure
  GC.enable
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读