PHP 内存问题是否需要取消设置


PHP memory question do you need to unset?

如果在脚本完成执行之前不取消设置数组,会发生什么情况?

我正在运行数千个 CSV 文件,将数十万客户的数据解析为数组。 它在前 5/6 小时内工作正常,然后开始陷入困境。

我每次执行大约运行 5-10 个 CSV......我想知道取消设置脚本中的数组是否有帮助......我以为它们会在脚本结束后取消分配。我错了吗?

据我所知,数组 - 就像所有内存一样 - 应该在脚本死亡时死亡。

您的 PHP 脚本

是否被另一个 PHP 脚本调用? 如果你通过"include"来做到这一点,那本质上是把你的"较低"级别的PHP脚本插入到更高级别的PHP脚本中 - 这会导致它们持续存在。

脚本结束时清除所有内存。您是否尝试过使用memory_get_peak_usage()memory_get_usage()?它们可用于查找内存分配问题。

脚本成功完成后,应清理所有已用内存。如果不是,这是PHP中的一个错误。取消设置数组在这里无济于事。

我认为这取决于您运行的是哪个版本的 PHP。PHP 5.3 有一个改进的垃圾收集机制,应该可以防止这种内存泄漏。此页面 (http://www.php.net/manual/en/features.gc.performance-considerations.php) 记录了 5.3 之前版本中的问题,但建议您可以使用 gc_collect_cycles() 函数手动调用垃圾回收(如果我正确阅读了它)。

Unset只是破坏一个变量 - 它不会释放内存。如果该行为发生在数小时的运行时后,并且这是一次性脚本,则可以将CSV文件拆分为较小的块以加快速度并帮助找出问题开始发生的位置。