我的工作遍历用户并根据他们的偏好发送个性化电子邮件。我在Symfony2中使用模板引擎来生成HTML。
基本上这样的东西在循环中运行:
public function getHTML($user)
{
$templating = $this->getContainer()->get('templating');
$html = $templating->renderResponse(
'recommendation.html.twig',
array(
'user' => $user
)
)->getContent();
return $html;
}
问题是CPU使用率高达100%,处理每个用户需要更长时间。以下是一些数据:
Took 5.4851469993591 seconds
Took 12.790720939636 seconds
Took 23.007503032684 seconds
Took 34.852293014526 seconds
Took 43.901736021042 seconds
Took 66.028288125992 seconds
每行代表处理100个用户所花费的时间。所以前100个用户需要5秒,接下来的12秒,依此类推。
关于如何提高绩效的任何建议?
答案 0 :(得分:2)
当您获取托管实体时,它可能会积累一个大量的托管实体身份映射。
在电子邮件发送的每次迭代中,请查看实体经理clear or detach
最好结合迭代结果使用它,有一个good example in the documentation。
对于执行大量迭代的作业,它可以对速度和内存消耗产生巨大影响。
对于长时间运行的脚本,如果没有一点工作,Doctrine通常不是很好。