3

スクリプトの実行が完了する前に配列の設定を解除しないとどうなりますか?

何千もの CSV ファイルを処理し、何十万もの顧客のデータを配列に解析しています。最初の 5 ~ 6 時間は問題なく動作し、その後、動きが鈍くなり始めます。

実行ごとに約5〜10個のCSVを実行します...スクリプトで配列の設定を解除するとこれが役立つかどうか疑問に思っています...スクリプトが終了すると割り当てが解除されると思いました。私が間違っている?

4

5 に答える 5

1

私が知る限り、配列は、すべてのメモリと同様に、スクリプトが終了すると終了するはずです。

PHP スクリプトが別の PHP スクリプトによって呼び出されていますか? 「インクルード」でそれを行っている場合、それは本質的に「下位」レベルの PHP スクリプトを取得し、それを上位レベルのスクリプトにプラグインします。これにより、それらが永続化されます。

于 2011-05-12T20:20:07.993 に答える
1

スクリプトが終了すると、すべてのメモリがクリアされます。と を使ってみましたmemory_get_peak_usage()memory_get_usage()?これらは、メモリ割り当ての問題を見つけるのに役立ちます。

于 2011-05-12T20:26:39.640 に答える
0

Unset変数を破棄するだけで、メモリを解放しません。その動作が数時間の実行後に発生し、これが 1 回限りのスクリプトである場合は、CSV ファイルを小さなブロックに分割して処理を高速化し、問題が発生し始めた場所を見つけやすくします。

于 2011-05-12T20:28:03.853 に答える
0

スクリプトが正常に終了した後、すべての使用済みメモリをクリーンアップする必要があります。そうでない場合、これは PHP のバグです。配列の設定を解除しても、ここでは役に立ちません。

于 2011-05-12T20:22:11.193 に答える
0

実行しているPHPのバージョンに依存すると思います。PHP 5.3 では、ガベージ コレクション メカニズムが改善されており、この種のメモリ リークを防ぐことができます。このページ ( http://www.php.net/manual/en/features.gc.performance-considerations.phpgc_collect_cycles() ) は、5.3 より前のバージョンの問題を文書化していますが、関数を使用してガベージ コレクションを手動で呼び出すことができることを示唆しています(ちゃんと読んだ)。

于 2011-05-12T20:25:02.397 に答える