En ce qui concerne les objets, en particulier dans le scénario de chargement paresseux, il faut tenir compte du fait que le ramasseur d'ordures fonctionne dans les cycles inactifs du processeur. Il faut donc supposer que vous allez avoir des problèmes lorsque beaucoup d'objets sont chargés ; une petite pénalité de temps résoudra la libération de la mémoire.
Utilisez time_nanosleep pour permettre à GC de collecter la mémoire. Mettre la variable à null est souhaitable.
Testé sur un serveur de production, à l'origine le travail a consommé 50MB et a ensuite été arrêté. Après l'utilisation de nanosleep, la consommation de mémoire constante était de 14 Mo.
Il faut dire que cela dépend du comportement du GC qui peut changer d'une version de PHP à l'autre. Mais cela fonctionne bien avec PHP 5.3.
Par exemple, cet exemple (code pris de VirtueMart2 google feed)
for($n=0; $n<count($ids); $n++)
{
//unset($product); //usefull for arrays
$product = null
if( $n % 50 == 0 )
{
// let GC do the memory job
//echo "<mem>" . memory_get_usage() . "</mem>";//$ids[$n];
time_nanosleep(0, 10000000);
}
$product = $productModel->getProductSingle((int)$ids[$n],true, true, true);
...