gpt4 book ai didi

php - 遍历学说集合占用太多内存

转载 作者:可可西里 更新时间:2023-10-31 22:53:58 24 4
gpt4 key购买 nike

我有一个 symfony2 命令可以浏览我的大数据库并将数据导出到一个 XML 文件中。

这个操作占用太多内存,我可以看到我的 php 进程在运行时开始占用 50 MB,然后是 100Mb .. 5 分钟后它是 700MB,在它完成之前它占用了大约 800MB,这显然是巨大的。

如何优化 Doctrine 使用的内存量?

下面是我的代码的样子:

  // Gets 4000 entities
$entities1 = $this->doctrine->getRepository('MyBundle:Entity1')->findAll();


foreach ($entities1 as $entity1)
{
// 200 entities under every entity1
foreach ($entity1->getCollection1() as $c)
{
// write into an xml
}
}

有没有办法优化这个/做得更好?

最佳答案

我建议使用“批处理”原则 ( http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html )。

它允许您处理大量数据并限制使用的 php 内存。所以在你的情况下会是这样的:

  $em = $this->doctrine->getManager();
// Gets 4000 entities
$queryEntities1 = $em->createQuery('select e from MyBundle:Entity1');
$iterableEntities1 = $queryEntities1->iterate();

foreach ($iterableEntities1 as $row)
{
$entity1 = $row[0];
// 200 entities under every entity1
foreach ($entity1->getCollection1() as $c)
{
// write into an xml
}
$em->detach($entity1);
}

未经测试,但您可能需要为您的收藏添加另一个查询!但是通过这种方式,您的内存将在每个实体之后被清理(不确定在您的情况下是否足够,但您仍然可以尝试为集合的 foreach 添加另一个可迭代请求)。

关于php - 遍历学说集合占用太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28545217/

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