【问题标题】:Releasing related records to free up memory in Yii1Yii1释放相关记录释放内存
【发布时间】:2016-12-23 11:21:35
【问题描述】:

我有一段代码遍历团队记录的所有相关个人资料记录 (HAS_MANY)。

看起来像这样:

$team = Team::model()->findByPk(1);
$score = 0;

foreach ($team->profiles as $profile) {
    $score += $profile->getScore();
}

现在我需要保留 $team 变量,但由于循环,所有配置文件都将保留在 profiles 属性中,并占用大量内存。

有没有办法安全地清理它? 我想过将profiles设置为null,但显然它仍然为空(我不知道稍后是否需要另一段代码访问profiles

【问题讨论】:

  • 所以您想保留$team 变量,同时又不想保留,因为它占用大量内存?如果是这种情况,我会一一取消设置,如果需要,只需再次从数据库中获取它们。或者将它们存储在某种临时文件中。不要认为我认为还有其他方法。
  • 不,不。我需要保留 $team 变量,但我可能不需要保留 profiles 属性。至少,不是针对将使用的每条$team 记录。

标签: php yii memory-leaks


【解决方案1】:

就像我说的,在我看来,您想保留 $team 变量,但同时又不想保留,因为它占用了大量内存...

在那种情况下,我会一一取消设置:

for ($i=0;for ($i=0, $j = count($team->profiles); $i < $j ; ++$i ){
    $score += $team->profiles[$i]->getScore();
    unset($team->profiles[$i]);
}

// OR

foreach ($team->profiles as $key => $profile) {
    $score += $profile->getScore();
    unset($team->profiles[$key]);
}

如果需要,只需再次从数据库中获取它们。或者将它们存储在某种临时文件中。不要认为我认为还有其他方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2013-12-05
    • 2015-04-22
    相关资源
    最近更新 更多