关闭垃圾收集可以获得什么?

时间:2010-12-24 02:14:55

标签: python garbage-collection timeit

我正在阅读timeit模块的代码,我注意到了这段:

gcold = gc.isenabled()
gc.disable()
timing = self.inner(it, self.timer)
if gcold:
    gc.enable()

这只是存储垃圾收集的状态(打开或关闭),然后将其关闭。函数inner执行正在计时的语句。然后它将垃圾收集器恢复到旧状态。

所以我很好奇这是什么意思。如果被测试的代码在垃圾收集器中运行,那么不应该在测试中反映出来吗?我错过了什么?

2 个答案:

答案 0 :(得分:5)

垃圾收集的本质是它的频率和持续时间有些不可预测。至少从特定代码块性能的角度来看,垃圾收集器只会给统计信息增加噪声。

从整个程序的角度来看,你是正确的,如果你的程序在运行垃圾收集器的系统上运行,那么在测量程序性能时应该考虑到这一点。但通常不考虑个别功能。

答案 1 :(得分:3)

当然代码应该是这样编写的?

gcold = gc.isenabled()
gc.disable()
try:
    timing = self.inner(it, self.timer)
finally:
    if gcold:
        gc.enable()

否则,如果定时代码抛出异常,垃圾收集将保持禁用状态。

I reported this on bugs.python.org,它已在Python 2.7.3和3.2.2中修复。