好的,我们正在开发一个网络相关的应用程序,用户可以上传自己的python脚本来决定算法。我们的代码包含c和cython和python模块。
由于避免延迟,内存占用和最少的处理对我们来说至关重要,我们想知道关闭垃圾收集和处理内存释放是否明智有效(性能明智)。
答案 0 :(得分:18)
让语言按照自己的意愿行事,如果您发现自己遇到了实际问题,请回过头来发帖。否则就是过早优化。
答案 1 :(得分:11)
gc.disable
仅关闭循环垃圾收集器。无论如何,当refcount降至零时,仍将收集对象。因此,除非你有很多循环引用,否则它没有任何区别。
您是在谈论自定义Python构建并禁用引用计数GC吗?
答案 2 :(得分:5)
只需开发应用程序,使其在功能上正确无误。一旦你有一个正确的应用程序启动分析器并确定慢位的位置。如果你担心用户脚本的性能,你可能会把注意力集中在错误的事情上。
更简短的答案是,在初始开发完成之前尝试优化可能是不明智和无效的。
答案 3 :(得分:4)
垃圾收集使一切变慢。它还使一切都不那么容易出错。特别是如果重点是运行用户上传的脚本,我很难相信权衡取舍会很好;如果你有任何泄漏或双重释放,如果有人能弄清楚如何触发它,你现在有一个DoS漏洞。
答案 4 :(得分:2)
我花了很多时间在使用自动垃圾收集的语言上工作,我几乎可以单方面地说,相信原生垃圾收集比定制解决方案更快,更可靠。
答案 5 :(得分:1)
CPython(最初和最常用的Python)使用引用计数方法进行垃圾收集:不再引用的对象立即被释放。因此,如果您不创建任何循环,则不应该多次调用仅用于检测循环的垃圾收集器。