2016-06-02 12 views
2

私は、ユーザーをループして自分の好みに基づいてパーソナライズされた電子メールを送信する仕事をしています。私はSymfony2のテンプレートエンジンを使ってHTMLを生成しています。Symfony2テンプレートrenderResponseによりCPU使用率が上昇する

は、基本的にはこのようなものは、ループ内で実行されます。

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

プロファイラーとプロファイルを取って、それほど時間がかかります。 – zerkms

答えて

2

フェッチすると、管理対象エンティティの大量のアイデンティティマップが蓄積される可能性があります。電子メールの送信の各反復で

は、エンティティマネージャ clear or detach

反復結果との組み合わせでこれを使用するのが最善をやって見て、があります。

大量の反復を行うジョブでは、速度とメモリ消費に大きな違いがあります。

Doctrineは、長時間実行されるスクリプトではほとんど役に立ちません。

+0

ありがとう! @zerkmsが示唆しているようにいくつかのプロファイリングを行い、それが本当に教義の原因であることを知りました。 – Dhawal

関連する問題