gpt4 book ai didi

php - Yii NestedSetBehavior 内存使用

转载 作者:行者123 更新时间:2023-12-02 05:22:35 25 4
gpt4 key购买 nike

我在我的项目中使用 NestedSetBehavior 模型扩展来将数据库表用作树。

我写了例子:

    $model = SiteMap()->findAll();
$log .= $this->debug_memory('used')."<br>";
$ancestors = null;
foreach ($model as $item) {
$ancestors = $item->ancestors()->findAll();
}
$log .= $this->debug_memory('used')."<br>";
echo $log;

(debug_memory 源只返回友好的memory_get_usage(),$model 有50 项)

结果是:

used: 10525440
used: 15892712

经过简单计算 - 内存使用量增加了 5,24 Mb。

但我必须使用 $item->ancestors()->findAll();循环多次,所以我的内存增加了 138 Mb。我收到@out of memory 错误”。

我尝试使用 unset():

    $model = SiteMap()->findAll();
$log .= $this->debug_memory('used')."<br>";
$ancestors = null;
foreach ($model as $item) {
$ancestors= $item->ancestors()->findAll();
}
$ancestors = null;
unset($ancestors);
$log .= $this->debug_memory('used')."<br>";
echo $log;

但是我得到了结果:

used: 10525984
used: 15893320

行为祖先函数源是:

public function ancestors($depth=null)
{
$owner=$this->getOwner();
$db=$owner->getDbConnection();
$criteria=$owner->getDbCriteria();
$alias=$db->quoteColumnName($owner->getTableAlias());

$criteria->mergeWith(array(
'condition'=>$alias.'.'.$db->quoteColumnName($this->leftAttribute).'<'.$owner->{$this->leftAttribute}.
' AND '.$alias.'.'.$db->quoteColumnName($this->rightAttribute).'>'.$owner->{$this->rightAttribute},
'order'=>$alias.'.'.$db->quoteColumnName($this->leftAttribute),
));

if($depth!==null)
$criteria->addCondition($alias.'.'.$db->quoteColumnName($this->levelAttribute).'>='.($owner->{$this->levelAttribute}-$depth));

if($this->hasManyRoots)
{
$criteria->addCondition($alias.'.'.$db->quoteColumnName($this->rootAttribute).'='.CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount);
$criteria->params[CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount++]=$owner->{$this->rootAttribute};
}

return $owner;
}

所以,我的问题是,为什么这个函数使用这么多内存,为什么当我取消设置变量时内存没有清理?

最佳答案

在您的 protected/config/main.php 文件中注释掉日志记录。 (或者在您定义配置设置的任何地方。)

您所看到的可能是每次 Active Record 调用时写入所有日志的结果,这可以解释为什么取消设置对象不会释放内存:使用的内存不在模型中,它在日志中.

尝试并报告结果。

关于php - Yii NestedSetBehavior 内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com