Отладка памяти symfony2

Я использую доктрину для вставки объемных данных в sql. Но после вставки от 600 до 700 записей выдает ошибку Fatal error: Исчерпан допустимый размер памяти 33554432 байт (пробовал выделить 24 байта)

Я попытался увеличить лимит памяти php, но это не сработало.

Вот мой код:

function DB_InsertPostTag ($postID, $listSize, $tagList, $tagTypeID,$categoryid) {

 $returnVal = 0;

 $insertList = array(1=>'');

 $insertCount = 0;
         sort($tagList);
         $tagCount = 0;
      for ($i = 0; $i <$listSize; $i++)
      {
           $tagCount++;
           if(isset($tagList[$i+1]))
      {

        if ($tagList[$i] != $tagList[$i+1])
           {
                $insertCount++;
                $tagList[$i];
                $tagCount = 0; //reset the counter

           }

       }
           //else we just ramp the counter
      }
      $batchSize = 1;
     for ($i = 1; $i < $insertCount; $i++)
      {

           $post_tag = new PostTag();
           $post_tag->setPostId($postID);
           $post_tag->setCategoryId($categoryid);
           $post_tag->setTagId($tagList[$i]);
           $post_tag->setTagTypeId($tagTypeID);
           $post_tag->setTagCount($tagCount);
           $em1 = $this->em;
           $em1->persist($post_tag);
            $id = $post_tag->getId();
           if (($i % $batchSize) == 0) {
            $em1->flush();
            $em1->clear(); // Detaches all objects from Doctrine!
        }
        }
        $em1->flush();
        $em1->clear();
      $returnVal = $id;

 return $returnVal;

}


person Randhir    schedule 28.03.2014    source источник


Ответы (1)


Если вы используете DQL, попробуйте сделать сбросы после определенного количества строк, чтобы php мог очистить эти объекты из памяти.

person hombee    schedule 28.03.2014
comment
Я использую флеш после каждой вставки, но не работаю - person Randhir; 28.03.2014
comment
Генерация запроса выглядит нормально, если код перед этим for ($i = 1; $i < $insertCount; $i++) не генерирует бесконечный цикл (я не смог его проверить), попробуйте написать операторы Insert вручную, без объектов. Мне пришлось сделать это, когда мне нужно было протестировать веб-сайт с миллионами пользователей, а доктрине требовалось слишком много времени для создания этих входных данных с объектами. - person hombee; 31.03.2014