【问题标题】:PHP variables and memory leaking [closed]PHP变量和内存泄漏[关闭]
【发布时间】:2013-07-21 04:58:28
【问题描述】:

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

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

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

【问题讨论】:

  • 我们可以看看一些代码吗?
  • 你能确定问题是内存泄漏,而不仅仅是低效的代码吗?
  • 在循环中为每个实例使用相同的变量。如果您将constructs 称为类实例化,请使用单例或在循环上方实例化一个类。通常问题出在代码上。
  • 我会尝试制定一个代码示例

标签: php performance memory memory-management memory-leaks


【解决方案1】:

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.脚本结束时 ...很明显

【讨论】:

  • 非常详尽的示例,感谢您花时间进行编辑。
【解决方案2】:

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

【讨论】:

  • 您引用了扩展开发人员的 php 开发指南。扩展是用 C 编写的。问题是关于 PHP 代码
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2011-06-28
      • 2013-03-29
      • 2010-11-28
      • 2018-08-26
      • 2013-07-12
      相关资源
      最近更新 更多