Laravel雄辩的游标方法和PHP生成器内存使用
我知道LarevelLaravel雄辩的游标方法和PHP生成器内存使用,php,laravel,eloquent,orm,generator,Php,Laravel,Eloquent,Orm,Generator,我知道Larevelcursor方法使用了PHP生成器特性,但我对内存使用感到非常困惑,下面是我的一些代码 函数生成器($max) { 对于($i=0;$i
cursor
方法使用了PHP生成器特性,但我对内存使用感到非常困惑,下面是我的一些代码
函数生成器($max)
{
对于($i=0;$i<$max;$i++){
收益率1美元;
}
}
路由::get('/',函数(){
转储(内存使用率());
$g=发电机(5000000);
$count=0;
foreach($g作为$a){
$count+=$a;
}
转储(计数);
转储(内存使用率());
转储(“完成”);
});
正如您所看到的,它不会占用太多内存,因为它会一个接一个地生成值并相加,而不是在内存中创建整个数组
Laravel还有一个类似的特性,那就是光标方法。(我有25000条数据库用户记录)
路由::get('/',函数(){
转储(内存使用率());
$users=User::cursor();
$count=0;
foreach(用户为$a){
$count+=1;
}
转储(计数);
转储(内存使用率());
转储(“完成”);
});
这是optput
我现在很困惑,它使用了一些内存,不像前面的例子那样使用了很少的内存,我认为它仍然在一个接一个地提取记录。
如果我使用这个$users=User::all()代码>它使用了更多的内存,大约是这个$users=User::cursor()的两倍大小代码>一
希望,我已经阐明了我的观点(为什么ormone使用一些内存,而generator方法不使用任何内存),我认为这不是PHP和Laravel特有的,但是我需要一个具体的例子来说明generators和ORM。如果有人能解释这一点,我们将不胜感激。我还在等待答案,干杯