我有一份工作,可以循环访问用户并根据他们的偏好发送个性化电子邮件。我正在使用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 秒,依此类推。
关于我可以做些什么来提高性能的任何建议?
获取托管实体时,可能会积累大量托管实体的身份映射。
在电子邮件发送的每次迭代中,查看是否清除或分离实体管理器
最好将其与迭代结果结合使用,文档中有一个很好的例子。
它可以对执行大量迭代的作业的速度和内存消耗产生巨大影响。
对于没有一些工作的长期运行的脚本,原则通常不是很好。