Bonjour à tous,

Je suis entrain de créer une commande avec symfony2 et je souhaite parcourir l'intégralité d'une entité "Film" 100k occurrences et j'ai un gros problème de mémoire (+de 10go consommée à la fin)

J'ai testé avec les iterator sans succès, voici le code que j'utilise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$em = $this->getContainer()->get('doctrine')->getEntityManager();
        $em->getConnection()->getConfiguration()->setSQLLogger(null);
        $connection = $em->getConnection();
        $platform = $connection->getDatabasePlatform();
        $connection->executeUpdate($platform->getTruncateTableSQL('search', true));
        $limit = (int) $input->getArgument('limit');
 
        $numfilms = $em->getRepository('MPMPBundle:Film')->count();
        $output->writeln($numfilms . " FILMS DANS LA BASE");
        $max = ceil($numfilms / $limit);
 
        $films = $em->createQuery('SELECT f FROM MPMPBundle:Film f');
 
        $iterableResult = $films->iterate();
        $i = 0;
        $batchSize = $limit;
        foreach ($iterableResult AS $row) {
 
            //$film = $row[0];
            if (($i % $batchSize) == 0) {
                $output->write(" Memory usage inside loop: " . floor((memory_get_usage() / 1024)) . " KB\r");
            }
            $em->detach($row[0]);
            ++$i;
        }
        $em->flush(); // Executes all updates.
        $em->clear(); // Detaches all objects from Doctrine!
Selon la doc http://docs.doctrine-project.org/pro...ata-processing

J'ai donc une croissance de la consommation de la RAM énorme et je comprends pas pourquoi

Merci de votre aide

PS: je lance les commandes en --no-debug --env=prod