PHP中内存清理的最佳方法是什么?(5.2)

Mic*_*ozd 12 php memory-leaks unset

我有两个简单的问题.什么是更好/有用的内存清理.

$var = null;
Run Code Online (Sandbox Code Playgroud)

要么

unset($var);
Run Code Online (Sandbox Code Playgroud)

我有一个循环的功能.我得到了(几分钟后)

Fatal error: Allowed memory size of 419430400 bytes exhausted
Run Code Online (Sandbox Code Playgroud)

我设置null并取消设置() - 每个对象(在循环结束时)但仍然没有任何成功:(我无法找出消耗内存的东西.

那么循环中的函数调用呢?PHP会在这些函数中释放所有分配吗?(通话后)

Álv*_*lez 5

PHP本身有时会混淆这两个概念,但一般来说,设置为NULL的变量与不存在的变量不同:

<?php

$foo = 'One';
$bar = 'Two';

$foo = NULL;
unset($bar);

var_dump($foo); // NULL
var_dump($bar); // Notice: Undefined variable: bar
var_dump(get_defined_vars()); // Only foo shows up: ["foo"]=> NULL

?>
Run Code Online (Sandbox Code Playgroud)

  • 这种混淆主要归因于错误的假设,即“isset”是“unset”的对应项。Unset 会从当前作用域中删除变量符号,其中 isset 还会检查它是否存在且非“null”。例如,在上面的示例中, `isset($foo)` 和 `isset($bar)` 都会返回 false。 (2认同)

Mic*_*ozd 2

我发现问题了。

首先,它是由xdebug分析工具引起的(我已经打开了所有东西:)) - 并且它消耗了大量内存。

所以请记住:xdebug(当打开分析时)会消耗应用程序的 PHP 进程中的一些内存

其次,我没有释放被调用函数中使用的静态成员

  • 但这并不能回答你的问题。就内存而言,取消设置或设置为 null 哪个更好 (2认同)