1

用 PHP 编码时是否可能造成内存泄漏?

迭代大型循环结构时,我的性能似乎真的很慢。

我应该取消设置()我不使用的变量吗?

4

4 回答 4

4

PHP 没有垃圾收集器(尽管从 PHP 5.3 开始有)。它使用引用计数来管理内存。因此,最常见的内存泄漏源是循环引用和全局变量。

最简单的方法是有选择地调用 memory_get_usage 并将其缩小到代码泄漏的地方。您还可以使用 xdebug 创建代码跟踪。

使用执行跟踪和 show_mem_delta 运行代码。

阅读更多关于 PHP 5.3+ 垃圾收集的信息,请参阅php.net/manual/de/features.gc.php

PHP 5.3 +

在 PHP 5.3+ 中,可以在三个主要地方(还有其他地方)执行垃圾收集:

1.当你告诉它时。喜欢使用 unset() 或 mysql_free_result()

2.当你离开一个函数时,清除任何离开范围的变量

3.当脚本结束时......很明显

于 2013-07-22T12:45:45.980 回答
0

如果 PHP 本身没有错误,那么 php 脚本中不可能发生内存泄漏。

内存清理由PHP 垃圾收集器为您完成。虽然它在大多数情况下都可以很好地工作而无需程序员的任何努力,但可以使用一组函数来控制它。 手动的

于 2013-07-22T12:49:53.617 回答
0

是的,Php 中可能存在内存泄漏,查看 O(n) 循环中是否存在内存泄漏的基本方法是查看循环时间是否与对象数量成正比,例如 100 个对象约为 10比 10 个对象的循环长几倍。如果 100 个对象的循环更长,则可能存在内存泄漏。

于 2013-07-22T12:52:48.980 回答
0

从 php 5.3 开始,垃圾收集器可以检测循环引用,请参阅http://fr2.php.net/gc_enable

您可以使用以下命令强制收集周期:http: //php.net/manual/fr/function.gc-collect-cycles.php

所有这些功能都有很大的成本,所以谨慎使用它,在大多数情况下让 php 为你做这件事,这是他的工作:)

于 2013-07-22T12:53:12.440 回答