所以我制作了这个简单的脚本来测试SplFixedArray对象,看看它的性能如何。
使用数组的传统方法
ini_set('memory_limit', '2048M');
$start = microtime(true);
$memStart = memory_get_peak_usage(true);
$loop = 1000000;
$array = [];
for ($i = 0; $i < $loop; ++$i) {
$arr = ['a'];
$array[$i] = $arr;
}
$end = microtime(true);
$memEnd = memory_get_peak_usage(true);
echo 'Time: ' . ($end - $start) . "\n";
echo 'Mem: ' . ($memEnd - $memStart) / 1024 / 1024 . 'Mb';
//Display: Time: 0.037514925003052 Mem: 28Mb
和SplFixedArray
ini_set('memory_limit', '2048M');
$start = microtime(true);
$memStart = memory_get_peak_usage(true);
$loop = 1000000;
$array = new SplFixedArray($loop);
for ($i = 0; $i < $loop; ++$i) {
$arr = new SplFixedArray(1);
$arr[0] = 'a';
$array[$i] = $arr;
}
$end = microtime(true);
$memEnd = memory_get_peak_usage(true);
echo 'Time: ' . ($end - $start) . "\n";
echo 'Mem: ' . ($memEnd - $memStart) / 1024 / 1024 . 'Mb';
//Display: Time: 0.21888899803162 Mem: 142Mb (slower by 5x)
从文档中,不是SplFixedArray承诺具有更好的性能和内存吗?为什么会这样。那么究竟应该在什么情况下使用呢?