私は無限ループで動作するコマンドラインスクリプトを開発しています。しばらくすると、メモリリークに起因すると思われるセグメンテーションフォルトが発生します。 ps
コマンドで生成された結果を見ると、スクリプトが使用するメモリがスクリプトがクラッシュする前に常に増加するように見えるため、私は正しいと思います。foreachループを使わずに連想配列を反復してメモリリークを引き起こす
私は、コマンドラインのPHPのメモリリークの一つの可能な原因が解除されることはありません配列のコピーを作成foreach
ループを使用することであると述べている、this articleを発見しました。いくつかの研究の後、それはそうであるように見える。だから私はforeach
のループを全てfor
と置き換えることにしました。
最初の質問 - 私の推論は正しいですか?
第2のもの - 私は反復する連想配列を持っていて、私は現在のキーを知りたいのですが? for
ループでnext()
とkey()
関数の組み合わせを使用して - 私はarray_walk()
、他のいずれかを使用することだろうと考えることができます
一つの方法。どのアプローチによってメモリリークが発生するのでしょうか?
私はいくつかのテストを行い、完了したら結果を投稿します。
二次的な問題は、反復可能オブジェクトを処理する方法ですが、それは後で行います。
EDIT 1:私のテストとはいくつかの異なる結果がありますので、いくつかのさらなる研究の後で新しいものを投稿します。
ループ用に変更する必要がありますか?あなたが投稿した記事には、foreachループで状況を改善する方法が記載されています。何が起こっているのかを見るためのサンプルコードがありますか? – Panagiotis
上記の記事で紹介したソリューションは、forループを使用しています。私が思うコードは無関係ですが、質問品質を改善するために現在書いているテストをいくつか掲載します。 – Przemek