我有一个表,其中包含大约 300k 行描述 Apple 推送通知服务的设备。我使用 Doctrine 2 作为 ORM。
插入设备没有问题,但是,检索它们是完全不同的故事。使用一个简单的 MySQL SELECT
,我可以在几秒钟内得到它们,而 WiFi 是主要的瓶颈。但是,如果我尝试通过 Doctrine 获取它们,即使我允许 PHP 高达 1 GB,它也会耗尽内存。根据文档,我已经为 Doctrine 实体创建了 getter 和 setter 以及受保护的属性。
我不知道我做错了什么。这可以:
$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);
}