gpt4 book ai didi

command-line-interface - 在不使用 foreach 循环的情况下迭代关联数组并导致内存泄漏

转载 作者:可可西里 更新时间:2023-10-31 23:42:54 25 4
gpt4 key购买 nike

我正在开发一个无限循环运行的命令行脚本。一段时间后,它会导致段错误,我认为这是由内存泄漏引起的。我想我是对的,因为在查看 ps 命令产生的结果后,脚本使用的内存似乎在脚本崩溃之前不断增加。

我找到了 this article ,它指出命令行 php 中内存泄漏的一个可能原因是使用 foreach 循环,它创建永远不会取消设置的数组副本。经过一些研究,情况似乎是这样。所以我决定用它们的 for 等效项替换所有 foreach 循环。

第一个问题 - 我的推理是否正确?

第二个 - 如果我有一个要迭代的关联数组并且我想知道当前键怎么办?

我能想到的一种方法是使用 array_walk(),另一种方法是结合使用 next()key()for 循环中运行。哪种方法不会导致内存泄漏?

我会进行一些测试并在完成后发布结果。

第二个问题是如何处理可迭代对象,但那是以后的事。

编辑 1:我的测试有一些不同的结果,所以我会在更多研究后发布一些新内容。

最佳答案

使用 next() 和 key() 不会像 foreach 那样造成内存泄漏。 Foreach 创建数组的“内部”副本,而该副本是内存泄漏问题。使用 next() 和 key() 不会创建副本 - 然后您使用的是原始数据。

关于如何解决这个问题的另一个建议是像这样使用 array_keys():

$keys = array_keys($assoc_array);
for ($keyindex = 0; $keyindex < count($keys); $keyindex++) {
$key = $keys[$keyindex];
$val = $assoc_array[$key];

/* Now you have $key and $val. */

}

但是,我相信您对 next() 和 key() 的建议将是最有效的——并且可能还会为您提供最漂亮的代码! :)

关于command-line-interface - 在不使用 foreach 循环的情况下迭代关联数组并导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9819606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com