我花了一周的时间弄清楚为什么我的一个红宝石脚本在内存中不断增长。我找到了罪魁祸首,但我不知道为什么在一种情况下而不是在另一种情况下它会在内存中增长:
我有一个简单的永恒循环,在Time对象上有条件:
i = 0
lastTry = Time.now()
until i == 5
if (lastTry + 0.75) < Time.now
puts '.'
lastTry = Time.now()
end
end
这将产生一个过程,该过程将消耗内存,直到我的内存填满为止,最终我的内核将停止允许我派生叉子,或在某个时候惊慌。对我的客户不利。
如果我用这个替换我的if:
if ((Time.now() - lastTry) * 1000.0) > 750.0
它不会再消耗内存了。
您能解释一下为什么吗?
您需要在直到循环中增加i变量,否则将永远无法满足您的条件。
i = 0
lastTry = Time.now()
until i == 5
if (lastTry + 0.75) < Time.now
puts '.'
lastTry = Time.now()
end
#add this line
i += 1
end