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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby 1.9 GarbageCollector,GC.disable / enable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个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

猜你在找的Ruby相关文章