本文给大家分享一下php教程之如何生成大数组「考虑内存」
1.我们先来看一下,如果要生成1000000个元素的数组,对内存的消耗:
1 2 3 4 5 6 7 8 9 10 11 | <strong><?php /** * 普通方式生成数组对内存的消耗 */ $startMemory = memory_get_usage(); $arr = range(0, 1000000); $endMemory = memory_get_usage(); echo round (( $endMemory - $startMemory ) / 1024 / 1024, 2) . PHP_EOL . 'mb' ;</strong> |
结果如下:
1 | 34 mb |
可以看到普通方式生成数组,对内存的消耗极大,一旦并发很容易造成内存不足
2.使用生成器原理生成数组对象的话,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php /** * 使用生成器构造生成对象,查看对内存的消耗 * @param $start * @param $end * @param int $step * @return Generator */ function xrange( $start , $end , $step =1) { for ( $i = $start ; $i < $end ; $i += $step ) { yield $i ; } } $startMemory = memory_get_usage(); foreach (xrange(0, 1000000) as $item ) { echo $item . '<br />' ; } $endMemory = memory_get_usage(); echo round (( $endMemory - $startMemory ) / 1024 / 1024, 2) . PHP_EOL . 'mb' ; |
结果如下:
1 | 0 mb |
使用生成器,可以看到对内存几乎无消耗,这是因为生成器只保存了构造数据的对象
简单分享php教程,感兴趣的小伙伴们需要更多资讯与教程欢迎关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/7786/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取