我遇到了臭名昭着的内存分配错误 所以,我有以下代码:
/** @var \Illuminate\Database\Eloquent\Collection|MPL[] $mpls */
foreach ($mpls as $index => $mpl) {
$mplMIDs = [];
$mpl->getMIDs(false, false)->each(function(MID $mid) use (&$mplMIDs) {
if ($mid->isSingleLinked()) {
$mplMIDs[] = $mid->mid_key;
}
});
if (!$mplMIDs) {
// most of the times the code enters here
unset($mpls[$index]);
}
gc_collect_cycles() // working only if this adds this row
}
正如你所看到的那样。 $mpls
数组,对于每个$mpl
,我从数据库(MIDs
函数)中获取getMIDs
,然后为每个MID
我检查是否是我所谓的singleLinked
{ {1}}(也调用数据库)。
关键是我有一个对象数组,我向它们插入更多对象,并向这些对象插入更多对象:
$mpls (array of objects) [
$mpl (object) {
$mids (array of objects) {
$entities (array of objects)
}
}
... more $mpls...
]
出于某种原因,内存快速充满(大约20秒内1GB!)我认为unset应该修复它,但只有当我通过gc_collect_cycles
强制执行垃圾收集时它才有用
也许它正在发生,因为对象是“深层”?
PHP版本:PHP 5.6.30
我得到错误:
PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 72 bytes) in /larvael/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 303
答案 0 :(得分:0)
php.ini文件如果您找不到php.ini文件或无法访问它,请打开引发错误的文件 ini_set(“ memory_limit”,“ 16M”);