PHP プログラミング言語を使用する過程で、一部のプログラムが大量のデータを処理するときにサーバー メモリの過剰使用を引き起こす場合があります。主な理由の 1 つは、PHP 配列が大量のメモリを消費することです。
PHP は、柔軟性があり、習得が簡単なプログラミング言語です。 PHP では、配列はサイズ変更が可能で、あらゆる種類の値を格納でき、キーによって各要素にアクセスできる強力なデータ構造です。 PHP 配列は非常に便利ですが、メモリの問題を引き起こす場合があります。
PHP 配列はハッシュ テーブルを通じて実装されます。要素を配列に追加すると、PHP は要素のキーをハッシュしてハッシュ テーブルに格納し、要素の値をハッシュ テーブル内の対応するキーに格納します。配列要素にアクセスするとき、PHP は同じハッシュ関数を使用して、キー名のハッシュ値に一致する配列内のインデックスを検索し、要素の値を取得します。このようにして、配列要素にすばやくアクセスできます。
ただし、このアプローチの代償として、メモリ使用量が比較的多くなります。 PHP 配列は要素の値自体を保存する必要があるだけでなく、キー名と要素の対応するインデックスも保存する必要があります。大量のデータを処理する場合、これらの追加のメモリ オーバーヘッドにより、PHP の実行が遅くなったり、プログラムがクラッシュしたりする可能性があります。
プログラム内で PHP 配列によって占有されるメモリをより詳しく説明するために、次のテスト プログラムを実行できます。
$startMemory = memory_get_usage(); $array = []; for($i = 0; $i < 1000000; $i++){ $array[] = $i; } $endMemory = memory_get_usage(); echo "Memory used: " . ($endMemory - $startMemory)/1024/1024 . " MB";
Memory used: 76 MB
$startMemory = memory_get_usage(); $array = new SplFixedArray(1000000); for($i = 0; $i < 1000000; $i++){ $array[$i] = $i; } $endMemory = memory_get_usage(); echo "Memory used: " . ($endMemory - $startMemory)/1024/1024 . " MB";
Memory used: 7.25 MB
$startMemory = memory_get_usage(); function generator($max){ for($i = 0; $i < $max; $i++){ yield $i; } } $array = generator(1000000); $endMemory = memory_get_usage(); echo "Memory used: " . ($endMemory - $startMemory)/1024/1024 . " MB";
Memory used: 0.25 MB
$startMemory = memory_get_usage(); $array = []; for($i = 0; $i < 1000000; $i++){ $array[] = $i; } $tempArrays = array_chunk($array, 10000); foreach($tempArrays as $tempArray){ //处理临时数组 } $endMemory = memory_get_usage(); echo "Memory used: " . ($endMemory - $startMemory)/1024/1024 . " MB";
以上がPHP 配列がメモリを大量に消費する場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。