PHP の本質は配列の使用にあり、配列をうまく使えば、あらゆるデータ構造で使用できます。 SPL と呼ばれる優れた機能があり、これには使用できる多くのデータ構造があり、配列を使用して達成できるパフォーマンスよりもはるかに優れたパフォーマンスが得られます。
今日は、名前が示すように、固定サイズの配列である SplFixedArray を見てみましょう。インスタンス化時に配列サイズを指定します。使用中に配列を拡張または縮小することはできません。
したがって、配列に対して動的操作を実行する場合、その使用は適切ではない可能性があり、SplFixedArray のインデックスは数値のみであり、キー値配列として使用することはできません。
以下は、Array および SplFixedArray の 100W 読み取りおよび書き込みパフォーマンスとメモリ使用量のテストです。
コード
<?php define('TEST_COUNT', 1000000); $memory = memory_get_usage(); $writeTime = microtime(true); $arr = []; for($i = 0; $i < TEST_COUNT; ++$i) { $arr[] = $i; } $writeTime = microtime(true) - $writeTime; $readTime = microtime(true); for($i = 0; $i < TEST_COUNT; ++$i) { $value = $arr[$i]; } $readTime = microtime(true) - $readTime; $memory = memory_get_usage() - $memory; echo '[Array]', PHP_EOL, 'Memory: ', $memory, ' bytes', PHP_EOL, 'Write Time: ', $writeTime, 's', PHP_EOL, 'Read Time: ', $readTime, 's', PHP_EOL; $memory = memory_get_usage(); $writeTime = microtime(true); $splFixedArray = new SplFixedArray(TEST_COUNT); for($i = 0; $i < TEST_COUNT; ++$i) { $splFixedArray[$i] = $i; } $writeTime = microtime(true) - $writeTime; $readTime = microtime(true); for($i = 0; $i < TEST_COUNT; ++$i) { $value = $splFixedArray[$i]; } $readTime = microtime(true) - $readTime; $memory = memory_get_usage() - $memory; echo '[SplFixedArray]', PHP_EOL, 'Memory: ', $memory, ' bytes', PHP_EOL, 'Write Time: ', $writeTime, 's', PHP_EOL, 'Read Time: ', $readTime, 's', PHP_EOL;
実行結果
[Array] Memory: 33558608 bytes Write Time: 0.083034038543701s Read Time: 0.022516965866089s [SplFixedArray] Memory: 16003208 bytes Write Time: 0.037343978881836s Read Time: 0.022947072982788s
結論
メモリ使用量: SplFixedArray は Array より半分以上のメモリを節約できます
書き込みパフォーマンス: SplFixedArray の方が高速ですArray# よりも
##読み取りパフォーマンス: 50/50、多くのテストの後、配列の読み取り速度はさらに高速ですインデックス配列のみを使用する必要があると判断でき、インデックス配列を予測できる場合配列のメンバーの数を指定するには、SplFixedArray を使用する方が明らかに適しています。以上がArray と SplFixedArray の比較 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。