在PHP中取消设置变量有多重要?

在PHP中取消设置变量有多重要?,php,memory,Php,Memory,我对PHP有些陌生,我想知道: 在PHP中取消设置变量有多重要 我知道,在像C这样的语言中,我们释放分配的内存以防止泄漏,等等。当我处理完变量时,通过对变量使用unset,这会显著提高我的应用程序的性能吗 另外,是否有一个比较使用unset和不使用unset之间差异的基准测试呢?用C等语言编写的应用程序通常运行数小时。但通常php应用程序的运行时间仅为0.05秒左右。因此,使用unset就不那么重要了 在许多情况下,unset实际上不会释放任何东西,因此它的使用通常是毫无意义的,除非代码的逻辑流

我对PHP有些陌生,我想知道:

在PHP中取消设置变量有多重要

我知道,在像C这样的语言中,我们释放分配的内存以防止泄漏,等等。当我处理完变量时,通过对变量使用unset,这会显著提高我的应用程序的性能吗


另外,是否有一个比较使用unset和不使用unset之间差异的基准测试呢?

用C等语言编写的应用程序通常运行数小时。但通常php应用程序的运行时间仅为0.05秒左右。因此,使用unset就不那么重要了

在许多情况下,unset实际上不会释放任何东西,因此它的使用通常是毫无意义的,除非代码的逻辑流要求它不存在。

请参阅(以及下面链接的问题):

这将输出如下内容

375696
425824
425824
在第一次迭代中,
$str
在赋值之前仍然为空。在第二次迭代中,
$str
将保存生成的字符串。当第二次调用
str\u repeat
时,它不会立即覆盖
$str
,而是首先创建要在内存中分配的字符串。因此,您最终得到了
$str
,以及应该分配的值。双重记忆。如果取消设置
$str
,则不会发生这种情况:

for($i=0;$i<3;$i++) {
    $str = str_repeat("Hello", 10000);
    echo memory_get_peak_usage(), PHP_EOL;
    unset($str);
}

// outputs something like
375904
376016
376016

对于($i=0;$i视情况而定,您应该确保
取消设置
ted非常长的字符串(例如从数据库中选择的博客文章内容)



(相关)并感谢这些链接。它们给出了很好的解释。还应该说,所有内存在脚本执行结束时都会被释放,因此在执行结束前取消设置不会有什么好处(甚至可能有害)对于性能。虽然这可能是真的,但这不是正确的答案。我已经运行脚本PHP好几天了。由于PHP是垃圾收集的,脚本运行的时间在很大程度上是不相关的。这个答案也给人一种印象,即长时间运行的脚本需要
unset
,而
unset
是等效的
free
@Yacoby“我已经运行脚本PHP好几天了”的ent也许你需要考虑使用其他东西来完成这些特定任务。PHP更适合web应用程序,网页不需要运行几天。当然,5年后web服务器的功能要强大得多(甚至便宜的托管服务器每月3英镑)PHP垃圾收集也得到了改进。不建议为释放资源而取消设置变量。在当前的项目中,我使用PHP通过循环生成许多大小可变的HTML页面,因此我肯定应该取消设置保存每个循环末尾内容的变量。这可能是“关键”cOrrct?@ DD0X在理论上是的。但是在实践中,你应该使用XDebug来对你的应用程序进行剖析,看看它是否真的很重要。我认为PHP中的取消设置比绝对的必要性要大得多。@ DD0X只是为了添加,PHP有一个垃圾收集器,它保证了99.9%的时间你不必担心。y我已经链接了问题下方的GC页面;),在上面的示例中,PHP仍然会使用双倍的内存,即使启用了GC。“这并不重要,除非它是。”这对于大型项目来说非常重要,你会碰到这堵墙,花很多时间试图修复它。我建议在大型VAR上使用它。
375696
425824
425824
for($i=0;$i<3;$i++) {
    $str = str_repeat("Hello", 10000);
    echo memory_get_peak_usage(), PHP_EOL;
    unset($str);
}

// outputs something like
375904
376016
376016
<?php
$post = get_blog_post();
echo $post;
unset($post);
?>