MeowcateLe 10/08/2018 à 09:28
Tiens, au passage puisqu'on parle de garbage collector, un de mes collègues (moins technique) est venu me voir tout à l'heure pour un problème de mémoire.
Son script PHP examine un (très gros) fichier XML Du coup comme il ne connaît pas la profondeur des nœuds, il utilise une fonction récursive.
Sauf que ! Voilà en très gros à quoi ça ressemblait.
<?php
$foo = maFonction($xml, $noeud);
function maFonction($xml, $noeud) {
$Objet = new Objet(); // Gros vendor bien complexe
$results = [];
$children = $Object->getChildren($xml, $noeud);
foreach($children as $child) {
$results[] = maFonction($xml, $child)
}
return $results;
}
Et qu'après 10 minutes à tourner, le script commence à bouffer plus de 2Go, alors qu'il est loin d'avoir fini, il se contente d'enfler. Il propose d'augmenter la limite mémoire de PHP et le faire tourner plutôt sur un de nos serveurs qui a beaucoup plus de RAM. Mwai... heureusement que je suis intervenu.