今天來看看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 更快
讀取效能:五五開,多次測試下來 Array 讀取速度甚至更快一些
如果你能確定只需要使用索引陣列,並且能預測該陣列的成員數,那顯然用SplFixedArray更加適合一些。
以上就是Array和SplFixedArray比較(程式碼範例)的詳細內容,更多請關注TW511.COM其它相關文章!