Bonne nouvelle PHP5.3 ne souffre pas de la maladie d'Alzheimer
Plus sérieusement je n'arrive pas à libérer la mémoire d'objets créés dans un tableau.
Je joins ci-contre un exemple de code avec un tableau contenant des objets créés dynamiquement. Je n'arrive pas à récupérer la place mémoire occupée par les objets ( unset, $mavar=null ...).
Dans la réalité j'emploie un code similaire dans un projet Symfony2 avec Doctrine pour mettre à jour une table à partir d'un fichier texte (100.000 lignes et plus ...). Le script PHP consomme toute la mémoire et échoue lamentablement.
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
 <?php
        class Objet {
            public $champs;
            public function __construct($init) {
                $champs = $init;
            }
        }
        echo 'memoire initiale->' . memory_get_usage(true) . '<br/>';
        $tablo = array();
        for ($x = 0; $x < 1000; $x++) {
            $tablo[$x] = new Objet(str_repeat("Hello", 10000));
        }
        echo 'memoire après création tableau->' . memory_get_usage(true) . '<br/>';
        for ($x = 0; $x < 1000; $x++) {
            $mavar = $tablo[$x];
            $mavar = null;
            unset ($mavar);
            $tablo[$x] = null;
            unset($tablo[$x]);
        }
        $tablo = array();
        echo 'memoire après libération->' . memory_get_usage(true) . '<br/>';
        ?>
Merci infiniment.