php - 在 PHP 中释放内存

标签 php mysql memory-management

我有一个脚本将大约 150 万行(约 400 MB 的数据)从一个表传输到另一个表(在此过程中,一些数据被转换、修改并放置在正确的字段中)。这是一个简单的脚本,它只是递归地加载数据,然后将其放置在正确字段和格式下的新表中。这些脚本的工作原理是(作为示例)从表中拉出所有用户,然后开始遍历用户,将它们插入到新表中,然后从该用户中拉出所有帖子,循环遍历并将它们插入到正确的表中,然后从帖子中提取所有评论并插入这些评论,然后跳回并提取该用户的所有联系人,最后转到下一个用户,并经历相同的过程。

我只是对正在传输的大量数据有疑问,因为它太大了,除了 PHP 中的垃圾收集(据我所知)之外没有任何类型的内存管理,我无法完成脚本(它通过大约 15,000 个连接和项目传输,然后达到 200MB 的内存上限)。

这是一次性的事情,所以我是在我的本地计算机上做的,而不是在实际的服务器上。

既然 unset() 实际上并没有释放内存,那么有没有其他方法可以释放变量中的数据呢?我尝试做的一件事是将变量覆盖为 NULL 值,但这似乎没有帮助。

任何建议都会很棒,因为伙计,这很臭。

最佳答案

如果您实际上是递归地执行此操作,那么这就是您的问题 - 您应该迭代地执行此操作。每次进行下一次调用时,递归处理都会留下开销(+垃圾)——所以最终你达到了极限。迭代方法没有这样的问题,应该是积极的垃圾收集。

您还谈到了令人 NumPy 的连接数量 - 为什么有这么多?我想我不完全理解您的过程,以及为什么需要这种方法而不是一个检索连接和一个存储连接。即使你 - 比如说 - 为每一行重新连接,你也应该考虑使用持久连接,它允许到同一个数据库的第二个连接重用最后一个连接。对于具有多用户的 Web 应用程序(出于可伸缩性原因),持久连接不是一个好主意,但在您非常有针对性的情况下,它们应该没问题。

关于php - 在 PHP 中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687727/

相关文章:

多处理器机器上的 Java 堆和 GC?

php - Drupal 将 nid/vid 从 int 转换为 bigint

php - 每隔一个空格拆分字符串以隔离每两个单词

用于服务器通知的 Android 客户端监听器

python - 使用 C 扩展 python 时查找内存泄漏

javascript - Settimeout和setinterval内存使用情况

php - 通过将 null/empty 最后留空来对 laravel 集合进行排序

php - 有些东西正在取消我的数据库类

java - 使用 MySQL 获取日期之间的记录并将其显示在 JTable 上

c# - 只能存储 MySqlParameter 对象