Array和SplFixedArray比較(程式碼範例)

2020-07-16 10:06:03
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 更快

讀取效能:五五開,多次測試下來 Array 讀取速度甚至更快一些

如果你能確定只需要使用索引陣列,並且能預測該陣列的成員數,那顯然用SplFixedArray更加適合一些。

以上就是Array和SplFixedArray比較(程式碼範例)的詳細內容,更多請關注TW511.COM其它相關文章!