首頁  >  文章  >  後端開發  >  Array和SplFixedArray比較(程式碼範例)

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

藏色散人
藏色散人轉載
2019-05-08 09:23:072688瀏覽

PHP 的精髓就是陣列的運用,陣列玩得好可以用於所有資料結構。有個叫SPL的好東西,裡面有很多資料結構可供我們使用,效能也比我們使用陣列實現的好很多。

今天來看看SplFixedArray,顧名思義,固定大小的陣列。實例化時,指定數組大小,使用過程中不可擴充數組、縮小。

所以如果你有對數組進行動態操作時,可能就不太適合用它,而且SplFixedArray的索引只能是數字,不可以作為鍵值數組使用。

以下是測試Array和SplFixedArray的100W 次讀寫效能以及記憶體佔用

程式碼

<?php
define(&#39;TEST_COUNT&#39;, 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 &#39;[Array]&#39;, PHP_EOL, &#39;Memory: &#39;, $memory, &#39; bytes&#39;, PHP_EOL, &#39;Write Time: &#39;, $writeTime, &#39;s&#39;, PHP_EOL, &#39;Read Time: &#39;, $readTime, &#39;s&#39;, 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 &#39;[SplFixedArray]&#39;, PHP_EOL, &#39;Memory: &#39;, $memory, &#39; bytes&#39;, PHP_EOL, &#39;Write Time: &#39;, $writeTime, &#39;s&#39;, PHP_EOL, &#39;Read Time: &#39;, $readTime, &#39;s&#39;, 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比較(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yurunsoft.com。如有侵權,請聯絡admin@php.cn刪除