3

如果在脚本执行完成之前没有取消设置数组会发生什么?

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

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

4

5 回答 5

1

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

于 2011-05-12T20:26:39.640 回答
1

据我所知,数组——就像所有内存一样——应该在脚本执行时死掉。

您的 PHP 脚本是否被另一个 PHP 脚本调用?如果您通过“包含”来执行此操作,那实际上会将您的“较低”级别的 PHP 脚本插入到较高级别的脚本中——这将导致它们持续存在。

于 2011-05-12T20:20:07.993 回答
0

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

于 2011-05-12T20:25:02.397 回答
0

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

于 2011-05-12T20:28:03.853 回答
0

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

于 2011-05-12T20:22:11.193 回答