Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 教义与记忆 dump(“内存之前:”.LogUtility::getMemoryUsage()); $this->_em->getConnection()->getConfiguration()->setSQLLogger(null); $start=$i*self::COUNT; $entityName=$this->getEntityName(); $query=$this->\u em->createQueryBuilder()->从($entityName,“c”)中选择(“c”)->; $query->setFirstResult($start); $query->setMaxResults(self::COUNT); $query=$query->getQuery(); $query->useQueryCache(false); $query->useResultCache(false); $result=$query->getResult(query::水合物_对象); //$query->expireequalycache(true); //未结算($结果); 对于($i=0;$i_em->分离($result[$i]); endfor; $this->_em->clear(); @$query=null; @$result=null; 未设置($query,$result); 转储(“在内存之后:.LogUtility::getMemoryUsage());_Php_Symfony_Memory Leaks_Doctrine Orm - Fatal编程技术网

Php 教义与记忆 dump(“内存之前:”.LogUtility::getMemoryUsage()); $this->_em->getConnection()->getConfiguration()->setSQLLogger(null); $start=$i*self::COUNT; $entityName=$this->getEntityName(); $query=$this->\u em->createQueryBuilder()->从($entityName,“c”)中选择(“c”)->; $query->setFirstResult($start); $query->setMaxResults(self::COUNT); $query=$query->getQuery(); $query->useQueryCache(false); $query->useResultCache(false); $result=$query->getResult(query::水合物_对象); //$query->expireequalycache(true); //未结算($结果); 对于($i=0;$i_em->分离($result[$i]); endfor; $this->_em->clear(); @$query=null; @$result=null; 未设置($query,$result); 转储(“在内存之后:.LogUtility::getMemoryUsage());

Php 教义与记忆 dump(“内存之前:”.LogUtility::getMemoryUsage()); $this->_em->getConnection()->getConfiguration()->setSQLLogger(null); $start=$i*self::COUNT; $entityName=$this->getEntityName(); $query=$this->\u em->createQueryBuilder()->从($entityName,“c”)中选择(“c”)->; $query->setFirstResult($start); $query->setMaxResults(self::COUNT); $query=$query->getQuery(); $query->useQueryCache(false); $query->useResultCache(false); $result=$query->getResult(query::水合物_对象); //$query->expireequalycache(true); //未结算($结果); 对于($i=0;$i_em->分离($result[$i]); endfor; $this->_em->clear(); @$query=null; @$result=null; 未设置($query,$result); 转储(“在内存之后:.LogUtility::getMemoryUsage());,php,symfony,memory-leaks,doctrine-orm,Php,Symfony,Memory Leaks,Doctrine Orm,嘿,我对这段代码越来越着迷了,我试图在调用了大约5000个实体之后释放内存,但它无法释放内存,我真的不明白为什么 "Before Memory: 19.5 mb" "After Memory: 80 mb" 我尝试过分离、清除、取消设置、析构函数、自由函数、使用sqllogger、缓存,我现在完全疯了! 另外,如果我使用Hyde_数组,我可以很容易地取消var和释放内存,但是当它关于对象时,这就成了一个问题。我的相关实体都有分离级联操作,是的,如果你问我报告内存的方式是否好,函数如下 sta

嘿,我对这段代码越来越着迷了,我试图在调用了大约5000个实体之后释放内存,但它无法释放内存,我真的不明白为什么

"Before Memory: 19.5 mb"
"After Memory: 80 mb"
我尝试过分离、清除、取消设置、析构函数、自由函数、使用sqllogger、缓存,我现在完全疯了!
另外,如果我使用Hyde_数组,我可以很容易地取消var和释放内存,但是当它关于对象时,这就成了一个问题。我的相关实体都有分离级联操作,是的,如果你问我报告内存的方式是否好,函数如下

 static public function getMemoryUsage() {
        $size = memory_get_usage(true);
        $unit=array('b','kb','mb','gb','tb','pb');
        $size = @round($size/pow(1024,($i=floor(log($size,1024)))),2).'    '.$unit[$i];
    return $size;
}
谢谢你的帮助,这让我抓狂!!哦,还有,这是从命令行调用获取存储库的控制器运行的, 控制器就这么简单

 __construct(EntityManager $em, Logger $logger);

public function executeAction (){
     $this->repo->updateData(0);
}
编辑:还尝试使用gc\u collect\u cycles(),没有区别

EDIT2:我需要这个对象,因为我将要更新它。否则我将使用数组,问题就解决了

EDIT3:还清除了日志文件夹,我的选项已用尽,无法释放内存,因为脚本将更新50k个实体

========================== SOLUTION ==================================

 $iterableResult= $query->iterate();
    foreach ($iterableResult as $row) {
         $this->_em->detach($row[0]);
    }

"Memory: 19.5 mb"
"Memory: 34.5 mb"
解决方案是在迭代函数中,它必须有某种机制使其工作!!所以基本上,不要认为它只是一个分离,你必须使用迭代类的条令来进行这个bash处理!!现在有10Mb的开销,但我不想扯掉我的头发去了解它去了哪里。不管怎样,伙计们!什么时候教条给了你一种方法,复制它!!不管怎样,如果有人能解释为什么迭代函数有那种特殊的魔力,那对其他经历过我同样挣扎的人来说将是非常棒的


众所周知,Doctrine2在长时间操作期间会出现一些内存泄漏。例如,请参阅

在我的例子中,禁用记录器为我节省了一些内存,但不是全部

$this->em->getConnection()->getConfiguration()->setSQLLogger(null);

我在doctrine odm和非常大的数据集上遇到了类似的内存溢出问题,占用了约4GB的内存,我的脚本也出现了问题。我在这几天中遇到了一些问题,几乎发疯了,所以最后我用本机驱动程序函数重写了,我的内存使用率最低,它顺利地清理了内存。它很可能转到了循环引用这是PHP中GC的工作原理。