垃圾收集会让python变慢吗?

时间:2011-06-23 02:35:59

标签: python memory-management memory-leaks garbage-collection cython

好的,我们正在开发一个网络相关的应用程序,用户可以上传自己的python脚本来决定算法。我们的代码包含c和cython和python模块。

由于避免延迟,内存占用和最少的处理对我们来说至关重要,我们想知道关闭垃圾收集和处理内存释放是否明智有效(性能明智)。

6 个答案:

答案 0 :(得分:18)

让语言按照自己的意愿行事,如果您发现自己遇到了实际问题,请回过头来发帖。否则就是过早优化。

答案 1 :(得分:11)

gc.disable仅关闭循环垃圾收集器。无论如何,当refcount降至零时,仍将收集对象。因此,除非你有很多循环引用,否则它没有任何区别。

您是在谈论自定义Python构建并禁用引用计数GC吗?

答案 2 :(得分:5)

只需开发应用程序,使其在功能上正确无误。一旦你有一个正确的应用程序启动分析器并确定慢位的位置。如果你担心用户脚本的性能,你可能会把注意力集中在错误的事情上。

更简短的答案是,在初始开发完成之前尝试优化可能是不明智和无效的。

答案 3 :(得分:4)

垃圾收集使一切变慢。它还使一切都不那么容易出错。特别是如果重点是运行用户上传的脚本,我很难相信权衡取舍会很好;如果你有任何泄漏或双重释放,如果有人能弄清楚如何触发它,你现在有一个DoS漏洞。

答案 4 :(得分:2)

我花了很多时间在使用自动垃圾收集的语言上工作,我几乎可以单方面地说,相信原生垃圾收集比定制解决方案更快,更可靠。

答案 5 :(得分:1)

CPython(最初和最常用的Python)使用引用计数方法进行垃圾收集:不再引用的对象立即被释放。因此,如果您不创建任何循环,则不应该多次调用仅用于检测循环的垃圾收集器。