gpt4 book ai didi

php - Doctrine findBy() 内存不足错误

转载 作者:行者123 更新时间:2023-12-04 05:45:19 29 4
gpt4 key购买 nike

我有一个包含大约 30 万行描述 Apple 推送通知服务设备的表。我使用 Doctrine 2 作为 ORM。

插入设备没有问题,但是,检索它们是一个完全不同的故事。使用简单的 MySQL SELECT我可以在几秒钟内得到它们,其中 WiFi 是主要瓶颈。但是,如果我尝试通过 Doctrine 获取它们,即使我允许 PHP 高达 1 GB,它也会耗尽内存。根据文档,我已经为 Doctrine 实体创建了 getter 和 setter 以及 protected 属性。

我不知道我做错了什么。这可以:

$devices = mysql_query("SELECT * FROM `Devices` WHERE `deviceProperty`='someValue'");

$message = new Message();
while($device = mysql_fetch_array($devices))
{
$message->addRecipient($device['pushToken']);
}

但这在第一行内存不足(它永远不会到达下一行的断点):
$devices = self::$entityManager->getRepository('Device')->findBy(array("deviceProperty" => "someValue"));
$message = new Message();
foreach($devices as $device)
{
$message->addRecipient($device->getPushToken);
}

最佳答案

您正在拉入 30 万个对象,它会消耗太多内存,请尝试分块处理...

$message = new Message();

$limit = 50;
$offset = 0;
while($devices = self::$entityManager->getRepository('Device')->findBy(array("deviceProperty" => "someValue"), array(), $limit, $offset))
{
foreach($devices as $device)
{
$message->addRecipient($device->getPushToken);
}
$offset += $limit;
}

关于php - Doctrine findBy() 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756852/

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