我正在开发一个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毫秒).