gpt4 book ai didi

PHP sf.1.4 插入 1.6 : memory leaking while looping results

转载 作者:可可西里 更新时间:2023-11-01 00:47:33 26 4
gpt4 key购买 nike

我正在使用 symfony 1.4 + propel 1.6,我想将我所有的用户数据库导出(索引)到 ElasticSearch。

我已经编写了所有的脚本并且一切正常,除了一个问题。我制作了一个重复约 20.000~ 次的循环,每次 memory_usage 都会增加。

问题是:它不应该,因为我正在销毁所有引用。

我认为 Propel 在某个地方留下了对我创建的每个对象的静态引用。但是找不到它,因为我已经禁用了实例池。

有人遇到过类似的问题吗?也许有人知道如何调试 PHP 内存限制? (webgrind 没有)我花了最后几个小时调试这段代码,但仍然无法修复它。

// optimizations
gc_enable();
Propel::getConnection()->useDebug(false);
Propel::disableInstancePooling();
// the while
$offset = 0;
$perpage = 10;
$c = SearchUserQuery::create()->limit($perpage);
do {
$rs = SearchUserPeer::doSelectStmt($c);
while ($row = $rs->fetch(PDO::FETCH_NUM))
{
$instance = new SearchUser();
$instance->hydrate($row);
$data = $instance->toElastic(); // this line makes a lot of memory leak
$_document = new Elastica\Document($instance->getPrimaryKey(), $data);
$_type->addDocument($_document);
unset($_document, $instance);
}
$c->offset($offset += $perpage);
} while( $rs->rowCount() );

函数 $instance->toElastic 是这样的:

public function toElastic()
{
return Array(
'profile' => $this->toArray(BasePeer::TYPE_COLNAME, false),
'info' => $this->getUserInfo()->toArray(BasePeer::TYPE_COLNAME, false),
'branches' => $this->getElasticBranches(),
);
}

/**
* @return array(id,name)
*/
public function getElasticBranches()
{
$branches = Array();
foreach ($this->getsfGuardUser()->getUserBranchs() as $branch)
$branches[] = Array(
'id' => $branch->getBranchId(),
'name' => $branch->getName()
);
return $branches;
}

最佳答案

你在取消设置之前试过这个吗?

// garbage collector problem in PHP 5.3
$instance->clearAllReferences(true);

// remove the variable content before removing the address (with unset)
$instance = null;
$_document = null;
$_type = null;

您可以从 this answer 获取更多提示.看看这 3 个链接,真的很有趣,即使其中一个是法语。

关于PHP sf.1.4 插入 1.6 : memory leaking while looping results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633179/

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